{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "G3MMAcssHTML"
      },
      "source": [
        "<link rel=\"stylesheet\" href=\"/site-assets/css/gemma.css\">\n",
        "<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Google+Symbols:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\" />"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Tce3stUlHN0L"
      },
      "source": [
        "##### Copyright 2024 Google LLC."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "cellView": "form",
        "id": "tuOe1ymfHZPu"
      },
      "outputs": [],
      "source": [
        "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PXNm5_p_oxMF"
      },
      "source": [
        "# Showcasing Agile Safety Classifiers with Gemma"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GrGMv8e4XxUI"
      },
      "source": [
        "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://ai.google.dev/gemma/docs/agile_classifiers\"><img src=\"https://ai.google.dev/static/site-assets/images/docs/notebook-site-button.png\" height=\"32\" width=\"32\" />View on Generative AI</a>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/google/generative-ai-docs/blob/main/site/en/gemma/docs/agile_classifiers.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://github.com/google/generative-ai-docs/blob/main/site/en/gemma/docs/agile_classifiers.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://codelabs.developers.google.com/codelabs/responsible-ai/agile-classifiers\"><img src=\"https://www.tensorflow.org/images/codelabs_logo.png\" height=\"24\" width=\"48\"/>Learn in Codelabs</a>\n",
        "  </td>\n",
        "</table>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Fn1NwT2fB6H6"
      },
      "source": [
        "This codelab illustrates how to create a customised text classifier using\n",
        "parameter efficient tuning (PET). Instead of fine-tuning the whole model, PET\n",
        "methods update only a small amount of parameters, which makes it relatively easy\n",
        "and fast to train. It also makes it easier for a model to learn new behaviors\n",
        "with relatively little training data. The methodology is described in detail in\n",
        "[*Towards Agile Text Classifiers for Everyone*][paper-agile-classifiers] which\n",
        "shows how these techniques can be applied to a variety of safety tasks and\n",
        "achieve state of the art performance with only a few hundred training examples.\n",
        "\n",
        "This codelab uses the [LoRA](https://arxiv.org/abs/2106.09685) PET method and\n",
        "the smaller Gemma model (`gemma_instruct_2b_en`) since that can be run faster\n",
        "and more efficiently. The colab covers the steps of ingesting data, formatting\n",
        "it for the LLM, training LoRA weights, and then evaluating the results. This\n",
        "codelab trains on the [ETHOS dataset][ethos-dataset], a publicly available\n",
        "dataset for detecting hateful speech, built from YouTube and Reddit comments.\n",
        "When trained on only 200 examples (1/4 of the dataset) it achieves F1: 0.80 and\n",
        "ROC-AUC: 0.78, slightly above the SOTA currently reported on\n",
        "[the leaderboard][ethos-leaderboard] (at the time of writing, 15 Feb 2024). When\n",
        "trained on the full 800 examples, like it achieves an F1 score of 83.74 and a\n",
        "ROC-AUC score of 88.17. Larger models, like `gemma_instruct_7b_en` will\n",
        "generally perform better, but training and execution costs are also larger.\n",
        "\n",
        "**Trigger Warning**: because this codelab develops a safety classifier for\n",
        "detecting hateful speech, examples and evaluation of the results contains some\n",
        "horrible language.\n",
        "\n",
        "[paper-agile-classifiers]: https://arxiv.org/abs/2302.06541\n",
        "[ethos-dataset]: https://arxiv.org/abs/2006.08328\n",
        "[ethos-leaderboard]: https://paperswithcode.com/sota/hate-speech-detection-on-ethos-binary"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "f0Pfoa65CVs6"
      },
      "source": [
        "## Installation and Setup\n",
        "\n",
        "For this codelab, you will need a recent version `keras` (3), `keras-nlp`\n",
        "(0.8.0) and a Kaggle account to download the base model."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "6QfrkE6CCkck"
      },
      "outputs": [],
      "source": [
        "import kagglehub\n",
        "\n",
        "kagglehub.login()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "zHs7wpZusEML"
      },
      "outputs": [],
      "source": [
        "!pip install -q -U keras-nlp\n",
        "!pip install -q -U keras"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "yn5uy8X8sdD0"
      },
      "outputs": [],
      "source": [
        "import os\n",
        "\n",
        "os.environ[\"KERAS_BACKEND\"] = \"tensorflow\""
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RETIODEyD9Mh"
      },
      "source": [
        "## Load ETHOS dataset\n",
        "\n",
        "In this section you will load the dataset on which to train our classifier and\n",
        "preprocess it into a train and test set. You will use the popular research\n",
        "dataset ETHOS which was collected to detect hate speech in social media. You\n",
        "can find more information about how the dataset was collected in the paper\n",
        "[ETHOS: an Online Hate Speech Detection Dataset][ethos-dataset]."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "yIpviRPcDmDx"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 998,\n  \"fields\": [\n    {\n      \"column\": \"comment\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 998,\n        \"samples\": [\n          \"EXECUTE OHOMO AND HIS SHEMALE BITCH MIKE.\",\n          \"men and women are not equal.  irrational contrary belief and policy only result in mounting failure.\",\n          \"Indians are shit but burgers only have broken English and ebonics to learn and still fail. Second thread in a row where a burger can't figure out you're and your\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"isHate\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.39176318927884884,\n        \"min\": 0.0,\n        \"max\": 1.0,\n        \"num_unique_values\": 43,\n        \"samples\": [\n          0.4,\n          0.9838709677419356,\n          0.603448275862069\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"hateful\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 0,\n        \"max\": 1,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          1,\n          0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}",
              "type": "dataframe",
              "variable_name": "df"
            },
            "text/html": [
              "\n",
              "  <div id=\"df-b045a877-d79c-47c9-ae9b-e37dd1079900\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>hateful</th>\n",
              "      <th>comment</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>517</th>\n",
              "      <td>0</td>\n",
              "      <td>You said he but still not convinced this is a ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>685</th>\n",
              "      <td>0</td>\n",
              "      <td>well, looks like its time to have another child</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>706</th>\n",
              "      <td>0</td>\n",
              "      <td>to be honest I am part of the LGBT community a...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>182</th>\n",
              "      <td>1</td>\n",
              "      <td>What if we send every men to mars to start a n...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>829</th>\n",
              "      <td>0</td>\n",
              "      <td>It doesn't matter if you're black or white, ...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b045a877-d79c-47c9-ae9b-e37dd1079900')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-b045a877-d79c-47c9-ae9b-e37dd1079900 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-b045a877-d79c-47c9-ae9b-e37dd1079900');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-5952d6cf-0042-4ae3-b0c4-f5b0bdcb7834\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-5952d6cf-0042-4ae3-b0c4-f5b0bdcb7834')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-5952d6cf-0042-4ae3-b0c4-f5b0bdcb7834 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "text/plain": [
              "     hateful                                            comment\n",
              "517        0  You said he but still not convinced this is a ...\n",
              "685        0    well, looks like its time to have another child\n",
              "706        0  to be honest I am part of the LGBT community a...\n",
              "182        1  What if we send every men to mars to start a n...\n",
              "829        0  It doesn't matter if you're black or white, ..."
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import pandas as pd\n",
        "\n",
        "gh_root = 'https://raw.githubusercontent.com'\n",
        "gh_repo = 'intelligence-csd-auth-gr/Ethos-Hate-Speech-Dataset'\n",
        "gh_path = 'master/ethos/ethos_data/Ethos_Dataset_Binary.csv'\n",
        "data_url = f'{gh_root}/{gh_repo}/{gh_path}'\n",
        "\n",
        "df = pd.read_csv(data_url, delimiter=';')\n",
        "df['hateful'] = (df['isHate'] >= df['isHate'].median()).astype(int)\n",
        "\n",
        "# Shuffle the dataset.\n",
        "df = df.sample(frac=1, random_state=32)\n",
        "\n",
        "# Split into train and test.\n",
        "df_train, df_test = df[:800],  df[800:]\n",
        "\n",
        "# Display a sample of the data.\n",
        "df.head(5)[['hateful', 'comment']]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "A3QpLBWieMov"
      },
      "source": [
        "## Download and Instantiate the Model\n",
        "\n",
        "As described in [the documentation](//ai.google.dev/gem/docs), you can easily\n",
        "use the Gemma model in many ways. With Keras, this is what you need to do:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "Z3c05TR6D0Pj"
      },
      "outputs": [],
      "source": [
        "import keras\n",
        "import keras_nlp\n",
        "\n",
        "# For reproducibility purposes.\n",
        "keras.utils.set_random_seed(1234)\n",
        "\n",
        "# Download the model from Kaggle using Keras.\n",
        "model = keras_nlp.models.GemmaCausalLM.from_preset('gemma_instruct_2b_en')\n",
        "\n",
        "# Set the sequence length to a small enough value to fit in memory in Colab.\n",
        "model.preprocessor.sequence_length = 128"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "UxQ3zVMtEAMp"
      },
      "outputs": [],
      "source": [
        "model.generate('Question: what is the capital of France? ', max_length=32)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vIDvHi3EC1Vm"
      },
      "source": [
        "## Text Preprocessing and Separator Tokens\n",
        "\n",
        "To help the model understand our intent better, you can preprocess the text and\n",
        "use separator tokens. This makes it less likely for the model to generate text\n",
        "that does not fit the expected format. For example, you might attempt to request\n",
        "a sentiment classification from the model by writing a prompt like this:\n",
        "\n",
        "```console\n",
        "Classify the following text into one of the following classes:[Positive,Negative]\n",
        "\n",
        "Text: you look very nice today\n",
        "Classification:\n",
        "```\n",
        "\n",
        "In this case, the model may or may not output what you are looking for. For\n",
        "example, if the text contains newline characters, it's likely to have a negative\n",
        "effect on the model performance. A more robust approach is to use separator\n",
        "tokens. The prompt then becomes:\n",
        "\n",
        "```console\n",
        "Classify the following text into one of the following classes:[Positive,Negative]\n",
        "<separator>\n",
        "Text: you look very nice today\n",
        "<separator>\n",
        "Prediction:\n",
        "```\n",
        "\n",
        "This can be abstracted using a function that preprocesses the text:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "0RYw2dX3EGtF"
      },
      "outputs": [],
      "source": [
        "def preprocess_text(\n",
        "    text: str,\n",
        "    labels: list[str],\n",
        "    instructions: str,\n",
        "    separator: str,\n",
        ") -> str:\n",
        "  prompt = f'{instructions}:[{\",\".join(labels)}]'\n",
        "  return separator.join([prompt, f'Text:{text}', 'Prediction:'])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qz63Rta4DC0u"
      },
      "source": [
        "Now, if you run the function using the same prompt and text as before, you\n",
        "should get the same output:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "_0VKIOjqEqv0"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Classify the following text into one of the following classes:[Positive,Negative]\n",
            "<separator>\n",
            "Text:you look very nice today\n",
            "<separator>\n",
            "Prediction:\n"
          ]
        }
      ],
      "source": [
        "text = 'you look very nice today'\n",
        "\n",
        "prompt = preprocess_text(\n",
        "    text=text,\n",
        "    labels=['Positive', 'Negative'],\n",
        "    instructions='Classify the following text into one of the following classes',\n",
        "    separator='\\n<separator>\\n',\n",
        ")\n",
        "\n",
        "print(prompt)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eS4XXfr_eW07"
      },
      "source": [
        "## Output Postprocessing\n",
        "\n",
        "The outputs of the model are tokens with various probabilities. Normally, to\n",
        "generate text, you would select among the top few most probable tokens and\n",
        "construct sentences, paragraphs or even full documents. However, for the purpose\n",
        "of classification, what actually matters is whether the model believes that\n",
        "`Positive` is more probable than `Negative` or vice versa.\n",
        "\n",
        "Given the model you instantiated earlier, this is how you can process its output\n",
        "into the independent probabilities of whether the next token is `Positive` or\n",
        "`Negative`, respectively:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "tfyaeeaoE5L0"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "\n",
        "\n",
        "def compute_output_probability(\n",
        "    model: keras_nlp.models.GemmaCausalLM,\n",
        "    prompt: str,\n",
        "    target_classes: list[str],\n",
        ") -> dict[str, float]:\n",
        "  # Shorthands.\n",
        "  preprocessor = model.preprocessor\n",
        "  tokenizer = preprocessor.tokenizer\n",
        "\n",
        "  # NOTE: If a token is not found, it will be considered same as \"<unk>\".\n",
        "  token_unk = tokenizer.token_to_id('<unk>')\n",
        "\n",
        "  # Identify the token indices, which is the same as the ID for this tokenizer.\n",
        "  token_ids = [tokenizer.token_to_id(word) for word in target_classes]\n",
        "\n",
        "  # Throw an error if one of the classes maps to a token outside the vocabulary.\n",
        "  if any(token_id == token_unk for token_id in token_ids):\n",
        "    raise ValueError('One of the target classes is not in the vocabulary.')\n",
        "\n",
        "  # Preprocess the prompt in a single batch. This is done one sample at a time\n",
        "  # for illustration purposes, but it would be more efficient to batch prompts.\n",
        "  preprocessed = model.preprocessor.generate_preprocess([prompt])\n",
        "\n",
        "  # Identify output token offset.\n",
        "  padding_mask = preprocessed[\"padding_mask\"]\n",
        "  token_offset = keras.ops.sum(padding_mask) - 1\n",
        "\n",
        "  # Score outputs, extract only the next token's logits.\n",
        "  vocab_logits = model.score(\n",
        "      token_ids=preprocessed[\"token_ids\"],\n",
        "      padding_mask=padding_mask,\n",
        "  )[0][token_offset]\n",
        "\n",
        "  # Compute the relative probability of each of the requested tokens.\n",
        "  token_logits = [vocab_logits[ix] for ix in token_ids]\n",
        "  logits_tensor = keras.ops.convert_to_tensor(token_logits)\n",
        "  probabilities = keras.activations.softmax(logits_tensor)\n",
        "\n",
        "  return dict(zip(target_classes, probabilities.numpy()))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "czpwDJg9Kz1N"
      },
      "source": [
        "You can test that function by running it with a the prompt you created earlier:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "2cJ5R-jlK0ct"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'Positive': 0.99994016, 'Negative': 5.984089e-05}"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "compute_output_probability(\n",
        "    model=model,\n",
        "    prompt=prompt,\n",
        "    target_classes=['Positive', 'Negative'],\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OMAkdNLCeZnL"
      },
      "source": [
        "## Wrapping it all as a Classifier\n",
        "\n",
        "For ease of use, you can wrap all of the functions you just created into a\n",
        "single sklearn-like classifier with easy to use and familiar functions like\n",
        "`predict()` and `predict_score()`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "e2Wyg8ziH-ls"
      },
      "outputs": [],
      "source": [
        "import dataclasses\n",
        "\n",
        "\n",
        "@dataclasses.dataclass(frozen=True)\n",
        "class AgileClassifier:\n",
        "  \"\"\"Agile classifier to be wrapped around a LLM.\"\"\"\n",
        "\n",
        "  # The classes whose probability will be predicted.\n",
        "  labels: tuple[str, ...]\n",
        "\n",
        "  # Provide default instructions and control tokens, can be overridden by user.\n",
        "  instructions: str = 'Classify the following text into one of the following classes'\n",
        "  separator_token: str = '<separator>'\n",
        "  end_of_text_token: str = '<eos>'\n",
        "\n",
        "  def encode_for_prediction(self, x_text: str) -> str:\n",
        "    return preprocess_text(\n",
        "        text=x_text,\n",
        "        labels=self.labels,\n",
        "        instructions=self.instructions,\n",
        "        separator=self.separator_token,\n",
        "    )\n",
        "\n",
        "  def encode_for_training(self, x_text: str, y: int) -> str:\n",
        "    return ''.join([\n",
        "        self.encode_for_prediction(x_text),\n",
        "        self.labels[y],\n",
        "        self.end_of_text_token,\n",
        "    ])\n",
        "\n",
        "  def predict_score(\n",
        "      self,\n",
        "      model: keras_nlp.models.GemmaCausalLM,\n",
        "      x_text: str,\n",
        "  ) -> list[float]:\n",
        "    prompt = self.encode_for_prediction(x_text)\n",
        "    token_probabilities = compute_output_probability(\n",
        "        model=model,\n",
        "        prompt=prompt,\n",
        "        target_classes=self.labels,\n",
        "    )\n",
        "    return [token_probabilities[token] for token in self.labels]\n",
        "\n",
        "  def predict(\n",
        "      self,\n",
        "      model: keras_nlp.models.GemmaCausalLM,\n",
        "      x_eval: str,\n",
        "  ) -> int:\n",
        "    return np.argmax(self.predict_score(model, x_eval))\n",
        "\n",
        "agile_classifier = AgileClassifier(labels=('Positive', 'Negative'))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "upc8lWNBefOK"
      },
      "source": [
        "## Model Fine-Tuning\n",
        "\n",
        "LoRA stands for Low-Rank Adaptation. It's a fine-tuning technique that can be\n",
        "used to efficiently fine-tune large language models. You can read more about it\n",
        "in the [*LoRA: Low-Rank Adaptation of Large Language Models* paper][paper-lora].\n",
        "\n",
        "The Keras implementation of Gemma provides a `enable_lora()` method that you can\n",
        "use for fine-tuning:\n",
        "\n",
        "[paper-lora]: https://arxiv.org/abs/2106.09685"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "aswoSEU_Mcbn"
      },
      "outputs": [],
      "source": [
        "# Enable LoRA for the model and set the LoRA rank to 4.\n",
        "model.backbone.enable_lora(rank=4)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xdiL7LYCZkfR"
      },
      "source": [
        "After enabling LoRA, you can start the fine-tuning process. This takes approximately 5 minutes per epoch on Colab:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "_tbUK1QSPD9O"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Epoch 1/4\n",
            "\u001b[1m400/400\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m354s\u001b[0m 703ms/step - loss: 1.1365 - sparse_categorical_accuracy: 0.5874\n",
            "Epoch 2/4\n",
            "\u001b[1m400/400\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m338s\u001b[0m 716ms/step - loss: 0.7579 - sparse_categorical_accuracy: 0.6662\n",
            "Epoch 3/4\n",
            "\u001b[1m400/400\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m324s\u001b[0m 721ms/step - loss: 0.6818 - sparse_categorical_accuracy: 0.6894\n",
            "Epoch 4/4\n",
            "\u001b[1m400/400\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m323s\u001b[0m 725ms/step - loss: 0.5922 - sparse_categorical_accuracy: 0.7220\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "<keras.src.callbacks.history.History at 0x7eb7e369c490>"
            ]
          },
          "execution_count": 17,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import tensorflow as tf\n",
        "\n",
        "# Create dataset with preprocessed text + labels.\n",
        "map_fn = lambda x: agile_classifier.encode_for_training(*x)\n",
        "x_train = list(map(map_fn, df_train[['comment', 'hateful']].values))\n",
        "ds_train = tf.data.Dataset.from_tensor_slices(x_train).batch(2)\n",
        "\n",
        "# Compile the model using the Adam optimizer and appropriate loss function.\n",
        "model.compile(\n",
        "    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
        "    optimizer=keras.optimizers.Adam(learning_rate=0.0005),\n",
        "    weighted_metrics=[keras.metrics.SparseCategoricalAccuracy()],\n",
        ")\n",
        "\n",
        "# Begin training.\n",
        "model.fit(ds_train, epochs=4)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4zmISk5qToPR"
      },
      "source": [
        "Training for more epochs will result in higher accuracy, until overfitting\n",
        "occurs."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "whpoXgFEenh1"
      },
      "source": [
        "## Inspect the Results\n",
        "\n",
        "You can now inspect the output of the agile classifier you just trained. This\n",
        "code will output the predicted class score given a piece of text:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "0rkHY2YHT3Te"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'Positive': 0.99899644, 'Negative': 0.0010035498}"
            ]
          },
          "execution_count": 24,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "text = 'you look really nice today'\n",
        "scores = agile_classifier.predict_score(model, text)\n",
        "dict(zip(agile_classifier.labels, scores))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "myL9BXvzerP-"
      },
      "source": [
        "## Model Evaluation\n",
        "\n",
        "Finally, you'll evaluate the performance of our model using two common metrics,\n",
        "the [F1 score][f1-score] and the [AUC-ROC][auc-roc]. The F1 score captures false\n",
        "negative and false positive errors by evaluating the harmonic mean of the\n",
        "precision and recall at a certain classification threshold. The AUC-ROC on the\n",
        "other hand captures the tradeoff between the true positive rate and the false\n",
        "positive rate across a variety of thresholds and computes the area under this\n",
        "curve.\n",
        "\n",
        "[f1-score]: https://en.wikipedia.org/wiki/F-score\n",
        "[auc-roc]: https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "n61v4Nx2Rwk0"
      },
      "outputs": [],
      "source": [
        "y_true = df_test['hateful'].values\n",
        "# Compute the scores (aka probabilities) for each of the labels.\n",
        "y_score = [agile_classifier.predict_score(model, x) for x in df_test['comment']]\n",
        "# The label with highest score is considered the predicted class.\n",
        "y_pred = np.argmax(y_score, axis=1)\n",
        "# Extract the probability of a comment being considered hateful.\n",
        "y_prob = [x[agile_classifier.labels.index('Negative')] for x in y_score]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "_IwZzmKNcYxh"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "F1: 0.84\n",
            "AUC-ROC: 0.88\n"
          ]
        }
      ],
      "source": [
        "from sklearn.metrics import f1_score, roc_auc_score\n",
        "\n",
        "print(f'F1: {f1_score(y_true, y_pred):.2f}')\n",
        "print(f'AUC-ROC: {roc_auc_score(y_true, y_prob):.2f}')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UPl7gtCKbsSg"
      },
      "source": [
        "Another interesting way to evaluate model predictions are confusion matrices. A\n",
        "confusion matrix will visually depict the different kinds of prediction errors."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "GpShnBJ0cbaN"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x7eb7e2d29ab0>"
            ]
          },
          "execution_count": 26,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAG2CAYAAABh8Lw3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABI70lEQVR4nO3deVxWZf7/8feNrAI3qCmLIqK4lktaX4Nc0jC0Mk0mLcm0NNNc0jKXZkxzQ51f6dCYtJjmjE5ZjZaWOWYuWeqYk2ZquObGYrmAoKz3+f1B3nWHC3jfgCdez8fjekz3dc65zufwuAc+fq7rnGMxDMMQAACAibhVdAAAAAClRQIDAABMhwQGAACYDgkMAAAwHRIYAABgOiQwAADAdEhgAACA6ZDAAAAA0yGBAQAApkMCAwAATIcEBgAAlNimTZvUvXt3hYaGymKxaMWKFQ7bDcPQiy++qJCQEPn4+CgmJkYHDhxw2OfMmTOKj4+X1WpVYGCgBg4cqKysrFLFQQIDAABKLDs7Wy1bttS8efMuu3327NlKTExUUlKStm3bJl9fX8XGxionJ8e+T3x8vPbs2aO1a9dq1apV2rRpkwYPHlyqOCy8zBEAAFwPi8Wi5cuXq2fPnpKKqi+hoaF67rnnNGbMGElSRkaGgoKCtGjRIj388MPat2+fmjVrpu3bt+u2226TJH322We69957deLECYWGhpbo3O5lckVwis1mU0pKivz9/WWxWCo6HABAKRiGofPnzys0NFRubmU30ZGTk6O8vDyXjGUYRrG/N15eXvLy8irVOEeOHFFaWppiYmLsfQEBAWrbtq22bNmihx9+WFu2bFFgYKA9eZGkmJgYubm5adu2bXrwwQdLdC4SmBtQSkqKwsLCKjoMAIATjh8/rjp16pTJ2Dk5OYoI91PaqUKXjOfn51dsDcqkSZM0efLkUo2TlpYmSQoKCnLoDwoKsm9LS0tTrVq1HLa7u7urevXq9n1KggTmBuTv7y9JCp35gty8vSs4GqBsNFpQugV7gFkUFOZq096/2X+Xl4W8vDylnSrU0R31ZPV3rsqTed6m8DY/6vjx47Jarfb+0lZfyhsJzA3oUhnPzdtbbj4kMPhjcq+SX9EhAGWqPJYA+Plb5Ofv3HlsKjrearU6JDDXIzg4WJKUnp6ukJAQe396erpatWpl3+fUqVMOxxUUFOjMmTP240uCu5AAADCpQsPmkuYqERERCg4O1rp16+x9mZmZ2rZtm6KioiRJUVFROnfunHbs2GHf54svvpDNZlPbtm1LfC4qMAAAmJRNhmxy7mbi0h6flZWlgwcP2j8fOXJEO3fuVPXq1VW3bl2NGjVK06ZNU8OGDRUREaGJEycqNDTUfqdS06ZN1bVrVz355JNKSkpSfn6+hg8frocffrjEdyBJJDAAAKAUvvnmG3Xq1Mn++dlnn5Uk9e/fX4sWLdLYsWOVnZ2twYMH69y5c2rXrp0+++wzef9mTeeSJUs0fPhw3X333XJzc1NcXJwSExNLFQfPgbkBZWZmKiAgQHXmTmENDP6wmsw/X9EhAGWioDBXX+yerYyMDKfXlFzJpb8TKcl1XLKIN7TxiTKNtyxQgQEAwKQKDUOFTtYhnD2+orCIFwAAmA4VGAAATKoiFvHeKEhgAAAwKZsMFVbSBIYpJAAAYDpUYAAAMCmmkAAAgOlwFxIAAICJUIEBAMCkbL80Z8cwIxIYAABMqtAFdyE5e3xFIYEBAMCkCo2i5uwYZsQaGAAAYDpUYAAAMCnWwAAAANOxyaJCWZwew4yYQgIAAKZDBQYAAJOyGUXN2THMiAQGAACTKnTBFJKzx1cUppAAAIDpUIEBAMCkKnMFhgQGAACTshkW2Qwn70Jy8viKwhQSAAAwHSowAACYFFNIAADAdArlpkInJ1MKXRRLeSOBAQDApAwXrIExWAMDAABQPqjAAABgUqyBAQAAplNouKnQcHINjElfJcAUEgAAMB0qMAAAmJRNFtmcrEXYZM4SDAkMAAAmVZnXwDCFBAAATIcEBgAAk7q0iNfZVhrnz5/XqFGjFB4eLh8fH0VHR2v79u327YZh6MUXX1RISIh8fHwUExOjAwcOuPrSSWAAADCrojUwzrfSGDRokNauXat//OMf2r17t+655x7FxMTo5MmTkqTZs2crMTFRSUlJ2rZtm3x9fRUbG6ucnByXXjsJDAAAKJGLFy/qww8/1OzZs9WhQwdFRkZq8uTJioyM1Pz582UYhubOnau//OUv6tGjh1q0aKHFixcrJSVFK1ascGksJDAAAJiU7Zd3ITnTSnMXU0FBgQoLC+Xt7e3Q7+Pjo82bN+vIkSNKS0tTTEyMfVtAQIDatm2rLVu2uOy6Je5CAgDAtFzzILui26gzMzMd+r28vOTl5eXQ5+/vr6ioKE2dOlVNmzZVUFCQ/vWvf2nLli2KjIxUWlqaJCkoKMjhuKCgIPs2V6ECAwCASdl+qaA42yQpLCxMAQEB9paQkHDZc/7jH/+QYRiqXbu2vLy8lJiYqEceeURubuWbUlCBAQAAOn78uKxWq/3z76svlzRo0EAbN25Udna2MjMzFRISoj59+qh+/foKDg6WJKWnpyskJMR+THp6ulq1auXSeKnAAABgUoWGxSVNkqxWq0O7UgJzia+vr0JCQnT27FmtWbNGPXr0UEREhIKDg7Vu3Tr7fpmZmdq2bZuioqJceu1UYAAAMKlLC3GdG6N0rxJYs2aNDMNQ48aNdfDgQT3//PNq0qSJHn/8cVksFo0aNUrTpk1Tw4YNFRERoYkTJyo0NFQ9e/Z0Ks7fI4EBAAAllpGRoQkTJujEiROqXr264uLiNH36dHl4eEiSxo4dq+zsbA0ePFjnzp1Tu3bt9NlnnxW7c8lZJDAAAJiUzXCTzcm7kGxG6SowvXv3Vu/eva+43WKxaMqUKZoyZYpTcV0LCQwAACZVEVNINwoW8QIAANOhAgMAgEnZJPtdRM6MYUYkMAAAmJStlK8CuNIYZmTOqAEAQKVGBQYAAJNyzbuQzFnLIIEBAMCkbLLIJmfXwDh3fEUhgQEAwKQqcwXGnFEDAIBKjQoMAAAm5ZoH2ZmzlkECAwCASdkMi2zOPgfGyeMrijnTLgAAUKlRgQEAwKRsLphCMuuD7EhgAAAwKde8jdqcCYw5owYAAJUaFRgAAEyqUBYVOvkgOmePrygkMAAAmBRTSAAAACZCBQYAAJMqlPNTQIWuCaXckcAAAGBSlXkKiQQGAACT4mWOAAAAJkIFBgAAkzJkkc3JNTAGt1EDAIDyxBQSAACAiVCBAQDApGyGRTbDuSkgZ4+vKCQwAACYVKEL3kbt7PEVxZxRAwCASo0KDAAAJsUUEgAAMB2b3GRzcjLF2eMrijmjBgAAlRoVGAAATKrQsKjQySkgZ4+vKFRgAAAwqUtrYJxtJVVYWKiJEycqIiJCPj4+atCggaZOnSrDMOz7GIahF198USEhIfLx8VFMTIwOHDjg8msngQEAwKSMX95G7UwzSvEk3lmzZmn+/Pn6+9//rn379mnWrFmaPXu2Xn31Vfs+s2fPVmJiopKSkrRt2zb5+voqNjZWOTk5Lr12ppAAAECJfP311+rRo4fuu+8+SVK9evX0r3/9S//9738lFVVf5s6dq7/85S/q0aOHJGnx4sUKCgrSihUr9PDDD7ssFiowAACYVKEsLmmSlJmZ6dByc3OLnS86Olrr1q3T/v37JUm7du3S5s2b1a1bN0nSkSNHlJaWppiYGPsxAQEBatu2rbZs2eLSa6cCAwCASdkM55/jYvtl+UpYWJhD/6RJkzR58mSHvvHjxyszM1NNmjRRlSpVVFhYqOnTpys+Pl6SlJaWJkkKCgpyOC4oKMi+zVVIYAAAgI4fPy6r1Wr/7OXlVWyfZcuWacmSJVq6dKluvvlm7dy5U6NGjVJoaKj69+9fnuFW3gRmw4YN6tSpk86ePavAwMAr7levXj2NGjVKo0aNKrfYUDbcz+bppuXH5bvnnCx5NuXX9FZa/wjlhvsV7WAYqrHypAI2/yS3iwW62MBfpx6pp/wg74oNHCiB3r336s47T6hOnUzl5VXR3r036e23W+rkyV//IM2atU4tWvzkcNwnnzTQ3/9+e3mHCxe5tBDX2TEkyWq1OiQwl/P8889r/Pjx9rUszZs319GjR5WQkKD+/fsrODhYkpSenq6QkBD7cenp6WrVqpVTcf7eDb8GZsCAAbJYLLJYLPL09FRkZKSmTJmigoICp8aNjo5WamqqAgICJEmLFi26bCKzfft2DR482KlzoeK5ZRco7K97ZVSx6OTwxvpxUgv99Ke6slX9NYev9p9UBa5PV3rfejo27mYZnm6q/WqyLPm2CowcKJnmzU9p5cpIjR7dRS+8cJfc3W2aPn2DvLwcf1euXl1fffv2sLe3325VMQHDJWyyuKSV1IULF+Tm5pg6VKlSRTZb0e/JiIgIBQcHa926dfbtmZmZ2rZtm6Kiolxz0b8wRQWma9euWrhwoXJzc/Xpp59q2LBh8vDw0IQJE657TE9PT3umeDU1a9a87nPgxlH9P6nKr+6p9P717X0FN/2mPGoYqrYuXWe6hSq7VTVJUtrj9VX/+W/lt/Oszt9eo7xDBkpl4sS7HD6/8kpbvfvuCjVseEbff1/L3p+b666zZ33KOTr8UXTv3l3Tp09X3bp1dfPNN+vbb7/VK6+8oieeeEKSZLFYNGrUKE2bNk0NGzZURESEJk6cqNDQUPXs2dOlsdzwFRipaB4uODhY4eHhGjp0qGJiYvTxxx/r7Nmzeuyxx1StWjVVrVpV3bp1c3hYztGjR9W9e3dVq1ZNvr6+uvnmm/Xpp59KKppCslgsOnfunDZs2KDHH39cGRkZ9mrPpYVL9erV09y5cyVJffv2VZ8+fRxiy8/P10033aTFixdLkmw2mxISEuwP+WnZsqU++OCDsv8h4ap8d51Vbl1fhbxxQPWf/5/qTv9eAV+esm/3+DlX7pn5utD01/KpzcddORF+8j6cVREhA06pWjVfknT+vKdDf6dOR/Xuu//W/PmrNWDArmIVGpjLpSfxOttK6tVXX9Wf/vQnPf3002ratKnGjBmjp556SlOnTrXvM3bsWI0YMUKDBw/W7bffrqysLH322Wfy9nbtdLwpKjC/5+Pjo9OnT2vAgAE6cOCAPv74Y1mtVo0bN0733nuv9u7dKw8PDw0bNkx5eXnatGmTfH19tXfvXvn5+RUbLzo6WnPnztWLL76o5ORkSbrsfvHx8XrooYeUlZVl375mzRpduHBBDz74oCQpISFB//znP5WUlKSGDRtq06ZNevTRR1WzZk117NixDH8quBqPn3MVsOmUzsYE60zXUHkfzVbNZUdluFuUGVVTVTKLftkXWD0cjiv095D7L9sAs7BYDD311Lfas+cmHT0aaO/fsCFc6em+OnPGRxER5/TEE7tUp855TZvWruKChVNcuQamJPz9/TV37lz7P+wvx2KxaMqUKZoyZYpTcV2LqRIYwzC0bt06rVmzRt26ddOKFSv01VdfKTo6WpK0ZMkShYWFacWKFXrooYd07NgxxcXFqXnz5pKk+vXrX3ZcT09PBQQEyGKxXHVaKTY2Vr6+vlq+fLn69esnSVq6dKkeeOAB+fv7Kzc3VzNmzNDnn39un+urX7++Nm/erNdff/2KCUxubq7D/faZmZml/+HgqiyGlBPuq9M9i24TzK3rK8+UiwrYdEqZUUwT4o9l2LAdqlfvnMaMiXHoX7060v7fP/4YqDNnfDRz5nqFhJxXaqp/eYcJOMUUU0irVq2Sn5+fvL291a1bN/Xp00cDBgyQu7u72rZta9+vRo0aaty4sfbt2ydJGjlypKZNm6Y777xTkyZN0nfffedUHO7u7urdu7eWLFkiScrOztZHH31kv//94MGDunDhgrp06SI/Pz97W7x4sQ4dOnTFcRMSEhQQEGBvv78XH84rCPBQXojjvH9esLc8zuRJkgp/qbz8vtpS5Xx+saoMcCMbOnSH/u//TmrcuM76+eeqV933hx+K1naFhDBNalY2ueBdSKVYxHsjMUUC06lTJ+3cuVMHDhzQxYsX9c4778hiufYPfNCgQTp8+LD69eun3bt367bbbnN4X8P1iI+P17p163Tq1CmtWLFCPj4+6tq1qyQpK6vol8Ann3yinTt32tvevXuvug5mwoQJysjIsLfjx487FSOKu9jATx7pFx36PNNzlF+jaCFv/k1eKrB6qOoPv1a/3C4WyvtIlnLqF59OBG48hoYO3aHo6BMaP76z0tOv/b1t0OCsJOnMGRb1mpXhgjuQDJMmMKaYQvL19VVkZKRDX9OmTVVQUKBt27bZp5BOnz6t5ORkNWvWzL5fWFiYhgwZoiFDhmjChAl68803NWLEiGLn8PT0VGFh4TVjiY6OVlhYmN577z2tXr1aDz30kDw8iv6F3qxZM3l5eenYsWOlWu/i5eV12QcGwXXO3h2surP3qfrqFJ1vU13eP2YpYPNPSo+vV7SDxaKzdwep+uoU5dXyVv5NXrrp4xMqCPRU1i93JQE3smHDduiuu45qypT2unjRXdWqFSXs2dkeystzV0jIed1111Ft3x6qzExPRURk6Kmn/qfdu2vqxx8DKzZ4XLfSvk36SmOYkSkSmMtp2LChevTooSeffFKvv/66/P39NX78eNWuXdv+AqlRo0apW7duatSokc6ePav169eradOmlx2vXr16ysrK0rp169SyZUtVrVpVVatevvzat29fJSUlaf/+/Vq/fr2939/fX2PGjNHo0aNls9nUrl07ZWRk6KuvvpLVai33pxTiV7n1/JQyJFI3rTih6p+cVP5NXvrpobo63/Ym+z5n7wmRW65NQUt+lNuFAl2M9NfJEY1keJiiUIlK7v77D0qSZs/+wqH/5Zf/T59/Xl/5+W669dZ09ey5X97eBfrpp6ravDlM7757c0WECzjNtAmMJC1cuFDPPPOM7r//fuXl5alDhw769NNP7RWRwsJCDRs2TCdOnJDValXXrl01Z86cy44VHR2tIUOGqE+fPjp9+vRl3wFxSXx8vKZPn67w8HDdeeedDtumTp2qmjVrKiEhQYcPH1ZgYKBat26tF154waXXjtLLblFN2S2uUk2xWHT6gTo6/UCd8gsKcJFu3a7+lt+ff/bV2LF3l1M0KC/lfRfSjcRiGIZR0UHAUWZmpgICAlRn7hS5+fAYe/wxNZl/vqJDAMpEQWGuvtg9WxkZGdd8NP/1uvR3osd/npCHr+e1D7iK/Ow8fXTP22Uab1kwZ9oFAAAqNVNPIQEAUJmV9l1GVxrDjEhgAAAwqcp8FxJTSAAAwHSowAAAYFKVuQJDAgMAgElV5gSGKSQAAGA6VGAAADCpylyBIYEBAMCkDDl/G7RZn2ZLAgMAgElV5goMa2AAAIDpUIEBAMCkKnMFhgQGAACTqswJDFNIAADAdKjAAABgUpW5AkMCAwCASRmGRYaTCYizx1cUppAAAIDpUIEBAMCkbLI4/SA7Z4+vKCQwAACYVGVeA8MUEgAAMB0qMAAAmFRlXsRLAgMAgElV5ikkEhgAAEyqMldgWAMDAABMhwQGAACTMn6ZQnKmlbYCU69ePVkslmJt2LBhkqScnBwNGzZMNWrUkJ+fn+Li4pSenu7yayeBAQDApAxJhuFkK+U5t2/frtTUVHtbu3atJOmhhx6SJI0ePVorV67U+++/r40bNyolJUW9evVy7YWLNTAAAKAUatas6fB55syZatCggTp27KiMjAwtWLBAS5cuVefOnSVJCxcuVNOmTbV161bdcccdLouDCgwAACZ16Um8zrbrlZeXp3/+85964oknZLFYtGPHDuXn5ysmJsa+T5MmTVS3bl1t2bLFFZdsRwUGAACTcuVdSJmZmQ79Xl5e8vLyuuqxK1as0Llz5zRgwABJUlpamjw9PRUYGOiwX1BQkNLS0pyK8/eowAAAAIWFhSkgIMDeEhISrnnMggUL1K1bN4WGhpZDhI6owAAAYFI2wyKLix5kd/z4cVmtVnv/taovR48e1eeff65///vf9r7g4GDl5eXp3LlzDlWY9PR0BQcHOxXn71GBAQDApJy+A+mXJklWq9WhXSuBWbhwoWrVqqX77rvP3temTRt5eHho3bp19r7k5GQdO3ZMUVFRLr12KjAAAKBUbDabFi5cqP79+8vd/ddUIiAgQAMHDtSzzz6r6tWry2q1asSIEYqKinLpHUgSCQwAAKZVUa8S+Pzzz3Xs2DE98cQTxbbNmTNHbm5uiouLU25urmJjY/Xaa685FePlkMAAAGBSFZXA3HPPPTKMyz8Cz9vbW/PmzdO8efOciutaSGAAADApVy7iNRsW8QIAANOhAgMAgEn99i4iZ8YwIxIYAABMqiiBcXYNjIuCKWdMIQEAANOhAgMAgElV1F1INwISGAAATMr4pTk7hhkxhQQAAEyHCgwAACbFFBIAADCfSjyHRAIDAIBZuaACI5NWYFgDAwAATIcKDAAAJsWTeAEAgOlU5kW8TCEBAADToQIDAIBZGRbnF+GatAJDAgMAgElV5jUwTCEBAADToQIDAIBZ8SC7q/v4449LPOADDzxw3cEAAICSq8x3IZUogenZs2eJBrNYLCosLHQmHgAAgGsqUQJjs9nKOg4AAHA9TDoF5Cyn1sDk5OTI29vbVbEAAIBSqMxTSKW+C6mwsFBTp05V7dq15efnp8OHD0uSJk6cqAULFrg8QAAAcAWGi5oJlTqBmT59uhYtWqTZs2fL09PT3n/LLbforbfecmlwAAAAl1PqBGbx4sV64403FB8frypVqtj7W7ZsqR9++MGlwQEAgKuxuKiZT6nXwJw8eVKRkZHF+m02m/Lz810SFAAAKIFK/ByYUldgmjVrpi+//LJY/wcffKBbb73VJUEBAABcTakrMC+++KL69++vkydPymaz6d///reSk5O1ePFirVq1qixiBAAAl0MFpuR69OihlStX6vPPP5evr69efPFF7du3TytXrlSXLl3KIkYAAHA5l95G7Wwzoet6Dkz79u21du1aV8cCAABQItf9ILtvvvlG+/btk1S0LqZNmzYuCwoAAFybYRQ1Z8cwo1JPIZ04cULt27fX//3f/+mZZ57RM888o9tvv13t2rXTiRMnyiJGAABwORXwILuTJ0/q0UcfVY0aNeTj46PmzZvrm2+++TUkw9CLL76okJAQ+fj4KCYmRgcOHHDuOi+j1AnMoEGDlJ+fr3379unMmTM6c+aM9u3bJ5vNpkGDBrk8QAAAcGM4e/as7rzzTnl4eGj16tXau3evXn75ZVWrVs2+z+zZs5WYmKikpCRt27ZNvr6+io2NVU5OjktjKfUU0saNG/X111+rcePG9r7GjRvr1VdfVfv27V0aHAAAuApXLMItxfGzZs1SWFiYFi5caO+LiIj4dSjD0Ny5c/WXv/xFPXr0kFT0ANygoCCtWLFCDz/8sHOx/kapKzBhYWGXfWBdYWGhQkNDXRIUAAC4NovhmiZJmZmZDi03N7fY+T7++GPddttteuihh1SrVi3deuutevPNN+3bjxw5orS0NMXExNj7AgIC1LZtW23ZssWl117qBOavf/2rRowY4TDf9c033+iZZ57R//t//8+lwQEAgKtw4RqYsLAwBQQE2FtCQkKx0x0+fFjz589Xw4YNtWbNGg0dOlQjR47UO++8I0lKS0uTJAUFBTkcFxQUZN/mKiWaQqpWrZosll9LTNnZ2Wrbtq3c3YsOLygokLu7u5544gn17NnTpQECAICyd/z4cVmtVvtnLy+vYvvYbDbddtttmjFjhiTp1ltv1ffff6+kpCT179+/3GKVSpjAzJ07t4zDAAAApebCNTBWq9UhgbmckJAQNWvWzKGvadOm+vDDDyVJwcHBkqT09HSFhITY90lPT1erVq2ci/N3SpTAlHdWBQAASqCcXyVw5513Kjk52aFv//79Cg8Pl1S0oDc4OFjr1q2zJyyZmZnatm2bhg4d6mSgjq77QXaSlJOTo7y8PIe+a2VvAADAnEaPHq3o6GjNmDFDvXv31n//+1+98cYbeuONNyRJFotFo0aN0rRp09SwYUNFRERo4sSJCg0NdfkSk1InMNnZ2Ro3bpyWLVum06dPF9teWFjoksAAAMA1lHMF5vbbb9fy5cs1YcIETZkyRREREZo7d67i4+Pt+4wdO1bZ2dkaPHiwzp07p3bt2umzzz6Tt7e3k4E6KnUCM3bsWK1fv17z589Xv379NG/ePJ08eVKvv/66Zs6c6dLgAADAVVTA26jvv/9+3X///VfcbrFYNGXKFE2ZMsXJwK6u1AnMypUrtXjxYt111116/PHH1b59e0VGRio8PFxLlixxyMIAAADKQqmfA3PmzBnVr19fUtF6lzNnzkiS2rVrp02bNrk2OgAAcGWX7kJytplQqROY+vXr68iRI5KkJk2aaNmyZZKKKjOBgYEuDQ4AAFyZK5/EazalTmAef/xx7dq1S5I0fvx4zZs3T97e3ho9erSef/55lwcIAADwe6VeAzN69Gj7f8fExOiHH37Qjh07FBkZqRYtWrg0OAAAcBUVsIj3RuHUc2AkKTw83P4AGwAAgPJQogQmMTGxxAOOHDnyuoMBAAAlZ5Hza1jMuYS3hAnMnDlzSjSYxWIhgQEAAGWuRAnMpbuOUL4iR+2Qu8WjosMAysTqlJ0VHQJQJjLP21StUTmdzIUvczQbp9fAAACAClKJF/GW+jZqAACAikYFBgAAs6rEFRgSGAAATMoVT9KtNE/iBQAAqGjXlcB8+eWXevTRRxUVFaWTJ09Kkv7xj39o8+bNLg0OAABcheGiZkKlTmA+/PBDxcbGysfHR99++61yc3MlSRkZGZoxY4bLAwQAAFdAAlNy06ZNU1JSkt588015ePz6jJI777xT//vf/1waHAAAwOWUehFvcnKyOnToUKw/ICBA586dc0VMAACgBFjEWwrBwcE6ePBgsf7Nmzerfv36LgkKAACUwKUn8TrbTKjUCcyTTz6pZ555Rtu2bZPFYlFKSoqWLFmiMWPGaOjQoWURIwAAuJxKvAam1FNI48ePl81m0913360LFy6oQ4cO8vLy0pgxYzRixIiyiBEAAMBBqRMYi8WiP//5z3r++ed18OBBZWVlqVmzZvLz8yuL+AAAwBVU5jUw1/0kXk9PTzVr1syVsQAAgNLgVQIl16lTJ1ksV17w88UXXzgVEAAAwLWUOoFp1aqVw+f8/Hzt3LlT33//vfr37++quAAAwLW4YAqp0lRg5syZc9n+yZMnKysry+mAAABACVXiKSSXvczx0Ucf1dtvv+2q4QAAAK7ouhfx/t6WLVvk7e3tquEAAMC1VOIKTKkTmF69ejl8NgxDqamp+uabbzRx4kSXBQYAAK6O26hLISAgwOGzm5ubGjdurClTpuiee+5xWWAAAABXUqoEprCwUI8//riaN2+uatWqlVVMAAAAV1WqRbxVqlTRPffcw1unAQC4EZTzu5AmT54si8Xi0Jo0aWLfnpOTo2HDhqlGjRry8/NTXFyc0tPTnb/Oyyj1XUi33HKLDh8+XBaxAACAUri0BsbZVho333yzUlNT7W3z5s32baNHj9bKlSv1/vvva+PGjUpJSSm2dtZVSr0GZtq0aRozZoymTp2qNm3ayNfX12G71Wp1WXAAAODG4u7uruDg4GL9GRkZWrBggZYuXarOnTtLkhYuXKimTZtq69atuuOOO1waR4krMFOmTFF2drbuvfde7dq1Sw888IDq1KmjatWqqVq1agoMDGRdDAAA5a2cpo8uOXDggEJDQ1W/fn3Fx8fr2LFjkqQdO3YoPz9fMTEx9n2bNGmiunXrasuWLdd9eVdS4grMSy+9pCFDhmj9+vUuDwIAAFwHFz4HJjMz06Hby8tLXl5eDn1t27bVokWL1LhxY6Wmpuqll15S+/bt9f333ystLU2enp4KDAx0OCYoKEhpaWlOBllciRMYwyi6wo4dO7o8CAAAULHCwsIcPk+aNEmTJ0926OvWrZv9v1u0aKG2bdsqPDxcy5Ytk4+PT3mEaVeqNTBXews1AAAoX658kN3x48cd1rH+vvpyOYGBgWrUqJEOHjyoLl26KC8vT+fOnXOowqSnp192zYyzSpXANGrU6JpJzJkzZ5wKCAAAlJALp5CsVmupb8TJysrSoUOH1K9fP7Vp00YeHh5at26d4uLiJEnJyck6duyYoqKinAyyuFIlMC+99FKxJ/ECAIDKYcyYMerevbvCw8OVkpKiSZMmqUqVKnrkkUcUEBCggQMH6tlnn1X16tVltVo1YsQIRUVFufwOJKmUCczDDz+sWrVquTwIAABQeuX9LqQTJ07okUce0enTp1WzZk21a9dOW7duVc2aNSVJc+bMkZubm+Li4pSbm6vY2Fi99tprzgV4BSVOYFj/AgDADaac30b97rvvXnW7t7e35s2bp3nz5jkZ1LWV+Dkwl+5CAgAAqGglrsDYbLayjAMAAJRWOVdgbiSlfpUAAAC4MZT3GpgbCQkMAABmVYkrMKV+GzUAAEBFowIDAIBZVeIKDAkMAAAmVZnXwDCFBAAATIcKDAAAZsUUEgAAMBumkAAAAEyECgwAAGbFFBIAADCdSpzAMIUEAABMhwoMAAAmZfmlOTuGGZHAAABgVpV4CokEBgAAk+I2agAAABOhAgMAgFkxhQQAAEzJpAmIs5hCAgAApkMFBgAAk6rMi3hJYAAAMKtKvAaGKSQAAGA6VGAAADApppAAAID5MIUEAABgHlRgAAAwKaaQAACA+VTiKSQSGAAAzKoSJzCsgQEAAKZDBQYAAJOqzGtgqMAAAGBWhovadZo5c6YsFotGjRpl78vJydGwYcNUo0YN+fn5KS4uTunp6dd/kisggQEAAKW2fft2vf7662rRooVD/+jRo7Vy5Uq9//772rhxo1JSUtSrVy+Xn58EBgAAk7IYhktaaWVlZSk+Pl5vvvmmqlWrZu/PyMjQggUL9Morr6hz585q06aNFi5cqK+//lpbt2515aWTwAAAYFounELKzMx0aLm5uVc87bBhw3TfffcpJibGoX/Hjh3Kz8936G/SpInq1q2rLVu2uOKK7UhgAACAwsLCFBAQYG8JCQmX3e/dd9/V//73v8tuT0tLk6enpwIDAx36g4KClJaW5tJ4uQsJAACTcuVdSMePH5fVarX3e3l5Fdv3+PHjeuaZZ7R27Vp5e3s7d2InUYEBAMCsXDiFZLVaHdrlEpgdO3bo1KlTat26tdzd3eXu7q6NGzcqMTFR7u7uCgoKUl5ens6dO+dwXHp6uoKDg1166VRgAABAidx9993avXu3Q9/jjz+uJk2aaNy4cQoLC5OHh4fWrVunuLg4SVJycrKOHTumqKgol8ZCAgMAgEmV94Ps/P39dcsttzj0+fr6qkaNGvb+gQMH6tlnn1X16tVltVo1YsQIRUVF6Y477nAu0N8hgQEAwKxuwHchzZkzR25uboqLi1Nubq5iY2P12muvufYkIoEBAMC0boRXCWzYsMHhs7e3t+bNm6d58+Y5N/A1sIgXAACYDhUYAADM6gacQiovJDAAAJiYWd8m7SymkAAAgOlQgQEAwKwMo6g5O4YJkcAAAGBSN8JdSBWFKSQAAGA6VGAAADAr7kICAABmY7EVNWfHMCOmkAAAgOmQwFxDvXr1NHfu3IoOAy5wS9ssvfTOES393x6tSdmlqK4ZDtsffS5Nb236QR8d3K0P9n6vme8dUuNbsysoWuDqdm/11YuPReiRW29WbGgrfb06wGG7YUjvzA7WI61uVvf6LTSudwOdPOzpsE/m2SqaOayuHmzUXL2aNNcrz4bpYjZ/FkzFcFEzoQr9pg4YMEAWi0UzZ8506F+xYoUsFku5xrJo0SIFBgYW69++fbsGDx5crrGgbHhXtenwHm/9/YU6l91+8rCX5v25tp7q3EjP9YxU2nFPJfzrsAKqF5RzpMC15VxwU/2bL2r4jBOX3b5sXi199HZNjZh5XH9btV/eVW16oW8D5eX8+rt11vBwHU32UcK7hzTlncPavc1Pc58PK69LgAtcugvJ2WZGFZ5qe3t7a9asWTp79mxFh3JZNWvWVNWqVSs6DLjAN+utemd2iL7+LOCy29cvr6Zvv/RX2jEvHd3vrTcmh8rXalNEs4vlHClwbbd3Pq8B49J0Z7eMYtsMQ1rxVk098kyaortmqn6zHI1NPKrT6R727/+xA176Zr1Vo18+piatL+iWttl6etoJbfwoUKfTWB5pGpeeA+NsM6EKT2BiYmIUHByshISEK+6zefNmtW/fXj4+PgoLC9PIkSOVnf1raT81NVX33XeffHx8FBERoaVLlxab+nnllVfUvHlz+fr6KiwsTE8//bSysrIkFb1J8/HHH1dGRoYsFossFosmT54syXEKqW/fvurTp49DbPn5+brpppu0ePFiSZLNZlNCQoIiIiLk4+Ojli1b6oMPPnDBTwrlyd3DpnsfPa2sDDcd3utT0eEApZJ2zFNnTnmodfsse5+v1aYmt17Qvh2+kqR93/jKL6BAjVr+mqC3bn9eFjfph299yz1moLQqPIGpUqWKZsyYoVdffVUnThQvhR46dEhdu3ZVXFycvvvuO7333nvavHmzhg8fbt/nscceU0pKijZs2KAPP/xQb7zxhk6dOuUwjpubmxITE7Vnzx698847+uKLLzR27FhJUnR0tObOnSur1arU1FSlpqZqzJgxxWKJj4/XypUr7YmPJK1Zs0YXLlzQgw8+KElKSEjQ4sWLlZSUpD179mj06NF69NFHtXHjxiv+DHJzc5WZmenQUDHaxmRqxYHdWnlktx588idNeLiBMs/wr1GYy5lTRd/ZwJr5Dv2BNfPt28785K7AGo7To1XcJf/AAvs+uPExhVTBHnzwQbVq1UqTJk0qti0hIUHx8fEaNWqUGjZsqOjoaCUmJmrx4sXKycnRDz/8oM8//1xvvvmm2rZtq9atW+utt97SxYuOZf9Ro0apU6dOqlevnjp37qxp06Zp2bJlkiRPT08FBATIYrEoODhYwcHB8vPzKxZLbGysfH19tXz5cnvf0qVL9cADD8jf31+5ubmaMWOG3n77bcXGxqp+/foaMGCAHn30Ub3++utXvP6EhAQFBATYW1gYc9AVZedXvnq6SyONfiBS32yw6s+vH1VAjfxrHwgAFYFFvBVv1qxZeuedd7Rv3z6H/l27dmnRokXy8/Ozt9jYWNlsNh05ckTJyclyd3dX69at7cdERkaqWrVqDuN8/vnnuvvuu1W7dm35+/urX79+On36tC5cuFDiGN3d3dW7d28tWbJEkpSdna2PPvpI8fHxkqSDBw/qwoUL6tKli0O8ixcv1qFDh6447oQJE5SRkWFvx48fL3FMcK3ci1WU8qOXfvifr+Y8F6bCAqnrI2cqOiygVKrXKqqsnPvJw6H/3E8e9m3Vaxbo3GnHSkthgXT+nLt9H+BGdsPUCTt06KDY2FhNmDBBAwYMsPdnZWXpqaee0siRI4sdU7duXe3fv/+aY//444+6//77NXToUE2fPl3Vq1fX5s2bNXDgQOXl5ZVqkW58fLw6duyoU6dOae3atfLx8VHXrl3tsUrSJ598otq1azsc5+XldcUxvby8rrodFcfiJnl4mfSfJ6i0guvmqXqtfH272U8NbimqRmefd9MP31bV/Y/9LElqelu2sjLcdeA7HzVsUbTPzs3+MmxSEx4fYBqV+V1IN0wCI0kzZ85Uq1at1LhxY3tf69attXfvXkVGRl72mMaNG6ugoEDffvut2rRpI6moEvLbu5p27Nghm82ml19+WW5uRUWnS9NHl3h6eqqwsPCaMUZHRyssLEzvvfeeVq9erYceekgeHkX/ymnWrJm8vLx07NgxdezYsXQXjzLnXbVQoRF59s/BYXmqf/NFnT9XRZlnqqjvM6e05T9WnUn3kLV6gR54/GfdFJyvL1cGVlzQwBVczHZTypFf/+GTdtxTh773kX9ggWrVyVfPQT/pX38LUu2IXAXXzdM7s0NUIyhf0b88/6huw1zd1ilTc8eEacSsEyrMt2jeX2qrY49zqhFMBcY0eBv1jaF58+aKj49XYmKivW/cuHG64447NHz4cA0aNEi+vr7au3ev1q5dq7///e9q0qSJYmJiNHjwYM2fP18eHh567rnn5OPjY3+WTGRkpPLz8/Xqq6+qe/fu+uqrr5SUlORw7nr16ikrK0vr1q1Ty5YtVbVq1StWZvr27aukpCTt379f69evt/f7+/trzJgxGj16tGw2m9q1a6eMjAx99dVXslqt6t+/fxn81FBSjVpe1F8//HUqb8hLKZKk/7xXTYnj66hOZK4mPvSjrNULdf5sFe3fVVXPPRipo/u9Kypk4Ir276qqsX/69R92r08uqvp26X1GY+YeU+9hp5RzwU1/GxumrMwquvn2bE1fclie3r/+sRr396Oa9+c6Gt+7gSxuUrt7z+npaSfL/VqA63FDJTCSNGXKFL333nv2zy1atNDGjRv15z//We3bt5dhGGrQoIHD7cyLFy/WwIED1aFDB/st2Xv27JG3d9EfnpYtW+qVV17RrFmzNGHCBHXo0EEJCQl67LHH7GNER0dryJAh6tOnj06fPq1JkybZb6X+vfj4eE2fPl3h4eG68847HbZNnTpVNWvWVEJCgg4fPqzAwEC1bt1aL7zwggt/Srge323xU2xoyytunzqoXvkFAzipZXSW1qTsvOJ2i0XqPzZN/cemXXEfa7VCTXjtaBlEh/JSmaeQLIZh0trRVZw4cUJhYWH2hbtmk5mZqYCAAN2lHnK3eFz7AMCErvbHFzCzzPM2VWt0WBkZGbJarWVzjl/+TkR1nSJ3D+eqxAX5Odry2YtlGm9ZuOEqMNfjiy++UFZWlpo3b67U1FSNHTtW9erVU4cOHSo6NAAAUAb+EAlMfn6+XnjhBR0+fFj+/v6Kjo7WkiVL7ItrAQD4I6rMU0h/iAQmNjZWsbGxFR0GAADly2YUNWfHMKE/RAIDAECl5Ion6Zozf7lxnsQLAABQUlRgAAAwKYtcsAbGJZGUPxIYAADMqhI/iZcpJAAAYDpUYAAAMKnKfBs1FRgAAMzKcFErofnz56tFixayWq2yWq2KiorS6tWr7dtzcnI0bNgw1ahRQ35+foqLi1N6errz13kZJDAAAKBE6tSpo5kzZ2rHjh365ptv1LlzZ/Xo0UN79uyRJI0ePVorV67U+++/r40bNyolJUW9evUqk1iYQgIAwKQshiGLk4twS3N89+7dHT5Pnz5d8+fP19atW1WnTh0tWLBAS5cuVefOnSVJCxcuVNOmTbV161bdcccdTsX5e1RgAAAwK5uL2nUoLCzUu+++q+zsbEVFRWnHjh3Kz89XTEyMfZ8mTZqobt262rJly/Wd5CqowAAAAGVmZjp89vLykpeXV7H9du/eraioKOXk5MjPz0/Lly9Xs2bNtHPnTnl6eiowMNBh/6CgIKWlpbk8XiowAACY1KUpJGebJIWFhSkgIMDeEhISLnvOxo0ba+fOndq2bZuGDh2q/v37a+/eveV52ZKowAAAYF4ufBfS8ePHZbVa7d2Xq75IkqenpyIjIyVJbdq00fbt2/W3v/1Nffr0UV5ens6dO+dQhUlPT1dwcLCTQRZHBQYAALO69CReZ5tkvzX6UrtSAvN7NptNubm5atOmjTw8PLRu3Tr7tuTkZB07dkxRUVEuv3QqMAAAoEQmTJigbt26qW7dujp//ryWLl2qDRs2aM2aNQoICNDAgQP17LPPqnr16rJarRoxYoSioqJcfgeSRAIDAIBplfeTeE+dOqXHHntMqampCggIUIsWLbRmzRp16dJFkjRnzhy5ubkpLi5Oubm5io2N1WuvveZcgFdAAgMAgFmV88scFyxYcNXt3t7emjdvnubNm+dcTCXAGhgAAGA6VGAAADApi62oOTuGGZHAAABgVuU8hXQjYQoJAACYDhUYAADMyoUPsjMbEhgAAEyqvN9GfSNhCgkAAJgOFRgAAMyqEi/iJYEBAMCsDEnO3gZtzvyFBAYAALNiDQwAAICJUIEBAMCsDLlgDYxLIil3JDAAAJhVJV7EyxQSAAAwHSowAACYlU2SxQVjmBAJDAAAJsVdSAAAACZCBQYAALOqxIt4SWAAADCrSpzAMIUEAABMhwoMAABmVYkrMCQwAACYFbdRAwAAs+E2agAAABOhAgMAgFmxBgYAAJiOzZAsTiYgNnMmMEwhAQAA06ECAwCAWTGFBAAAzMcFCYzMmcAwhQQAAEyHCgwAAGbFFBIAADAdmyGnp4C4CwkAAPyRJSQk6Pbbb5e/v79q1aqlnj17Kjk52WGfnJwcDRs2TDVq1JCfn5/i4uKUnp7u8lhIYAAAMCvD5ppWQhs3btSwYcO0detWrV27Vvn5+brnnnuUnZ1t32f06NFauXKl3n//fW3cuFEpKSnq1auXyy+dKSQAAMyqnNfAfPbZZw6fFy1apFq1amnHjh3q0KGDMjIytGDBAi1dulSdO3eWJC1cuFBNmzbV1q1bdccddzgX629QgQEAwKxshmuapMzMTIeWm5t7zdNnZGRIkqpXry5J2rFjh/Lz8xUTE2Pfp0mTJqpbt662bNni0ksngQEAAAoLC1NAQIC9JSQkXHV/m82mUaNG6c4779Qtt9wiSUpLS5Onp6cCAwMd9g0KClJaWppL42UKCQAAs3LhFNLx48dltVrt3V5eXlc9bNiwYfr++++1efNm585/nUhgAAAwK0MuSGCK/sdqtTokMFczfPhwrVq1Sps2bVKdOnXs/cHBwcrLy9O5c+ccqjDp6ekKDg52Ls7fYQoJAACUiGEYGj58uJYvX64vvvhCERERDtvbtGkjDw8PrVu3zt6XnJysY8eOKSoqyqWxUIEBAMCsyvkupGHDhmnp0qX66KOP5O/vb1/XEhAQIB8fHwUEBGjgwIF69tlnVb16dVmtVo0YMUJRUVEuvQNJIoEBAMC8bDZJJX+Oy5XHKJn58+dLku666y6H/oULF2rAgAGSpDlz5sjNzU1xcXHKzc1VbGysXnvtNedivAwSGAAAUCJGCao13t7emjdvnubNm1emsZDAAABgVrzMEQAAmE4lTmC4CwkAAJgOFRgAAMzKZsj+IBenxjAfEhgAAEzKMGwySvE26SuNYUYkMAAAmJVhOF9BYQ0MAABA+aACAwCAWRkuWANj0goMCQwAAGZls0kWJ9ewmHQNDFNIAADAdKjAAABgVkwhAQAAszFsNhlOTiGZ9TZqppAAAIDpUIEBAMCsmEICAACmYzMkS+VMYJhCAgAApkMFBgAAszIMSc4+B8acFRgSGAAATMqwGTKcnEIySGAAAEC5MmxyvgLDbdQAAADlggoMAAAmxRQSAAAwn0o8hUQCcwO6lA0XKN/p5xMBN6rM8+b8pQlcS2ZW0Xe7PCobrvg7UaB81wRTzkhgbkDnz5+XJG3WpxUcCVB2qjWq6AiAsnX+/HkFBASUydienp4KDg7W5jTX/J0IDg6Wp6enS8YqLxbDrJNff2A2m00pKSny9/eXxWKp6HD+8DIzMxUWFqbjx4/LarVWdDiAy/EdL1+GYej8+fMKDQ2Vm1vZ3SuTk5OjvLw8l4zl6ekpb29vl4xVXqjA3IDc3NxUp06dig6j0rFarfxyxx8a3/HyU1aVl9/y9vY2XdLhStxGDQAATIcEBgAAmA4JDCo9Ly8vTZo0SV5eXhUdClAm+I7jj4hFvAAAwHSowAAAANMhgQEAAKZDAgMAAEyHBAaV1oYNG2SxWHTu3Lmr7levXj3NnTu3XGICbgR852EGJDC44Q0YMEAWi0UWi0Wenp6KjIzUlClTVFBQ4NS40dHRSk1NtT9watGiRQoMDCy23/bt2zV48GCnzgVccun7PHPmTIf+FStWlPuTt/nOw8xIYGAKXbt2VWpqqg4cOKDnnntOkydP1l//+lenxrz0LpFr/dGoWbOmqlat6tS5gN/y9vbWrFmzdPbs2YoO5bL4zsMMSGBgCl5eXgoODlZ4eLiGDh2qmJgYffzxxzp79qwee+wxVatWTVWrVlW3bt104MAB+3FHjx5V9+7dVa1aNfn6+urmm2/Wp58Wvfzst1NIGzZs0OOPP66MjAx7tWfy5MmSHMvpffv2VZ8+fRxiy8/P10033aTFixdLKnqXVUJCgiIiIuTj46OWLVvqgw8+KPsfEkwjJiZGwcHBSkhIuOI+mzdvVvv27eXj46OwsDCNHDlS2dnZ9u2pqam677775OPjo4iICC1durTY1M8rr7yi5s2by9fXV2FhYXr66aeVlZUlSXznYXokMDAlHx8f5eXlacCAAfrmm2/08ccfa8uWLTIMQ/fee6/y84teDz9s2DDl5uZq06ZN2r17t2bNmiU/P79i40VHR2vu3LmyWq1KTU1VamqqxowZU2y/+Ph4rVy50v5HQJLWrFmjCxcu6MEHH5QkJSQkaPHixUpKStKePXs0evRoPfroo9q4cWMZ/TRgNlWqVNGMGTP06quv6sSJE8W2Hzp0SF27dlVcXJy+++47vffee9q8ebOGDx9u3+exxx5TSkqKNmzYoA8//FBvvPGGTp065TCOm5ubEhMTtWfPHr3zzjv64osvNHbsWEl85/EHYAA3uP79+xs9evQwDMMwbDabsXbtWsPLy8vo2bOnIcn46quv7Pv+/PPPho+Pj7Fs2TLDMAyjefPmxuTJky877vr16w1JxtmzZw3DMIyFCxcaAQEBxfYLDw835syZYxiGYeTn5xs33XSTsXjxYvv2Rx55xOjTp49hGIaRk5NjVK1a1fj6668dxhg4cKDxyCOPXM/l4w/mt9/nO+64w3jiiScMwzCM5cuXG5d+JQ8cONAYPHiww3Fffvml4ebmZly8eNHYt2+fIcnYvn27ffuBAwcMSfbv6uW8//77Ro0aNeyf+c7DzHgbNUxh1apV8vPzU35+vmw2m/r27atevXpp1apVatu2rX2/GjVqqHHjxtq3b58kaeTIkRo6dKj+85//KCYmRnFxcWrRosV1x+Hu7q7evXtryZIl6tevn7Kzs/XRRx/p3XfflSQdPHhQFy5cUJcuXRyOy8vL06233nrd58Uf06xZs9S5c+dilY9du3bpu+++05IlS+x9hmHIZrPpyJEj2r9/v9zd3dW6dWv79sjISFWrVs1hnM8//1wJCQn64YcflJmZqYKCAuXk5OjChQslXuPCdx43KhIYmEKnTp00f/58eXp6KjQ0VO7u7vr444+vedygQYMUGxurTz75RP/5z3+UkJCgl19+WSNGjLjuWOLj49WxY0edOnVKa9eulY+Pj7p27SpJ9jL7J598otq1azscx3to8HsdOnRQbGysJkyYoAEDBtj7s7Ky9NRTT2nkyJHFjqlbt672799/zbF//PFH3X///Ro6dKimT5+u6tWra/PmzRo4cKDy8vJKtUiX7zxuRCQwMAVfX19FRkY69DVt2lQFBQXatm2boqOjJUmnT59WcnKymjVrZt8vLCxMQ4YM0ZAhQzRhwgS9+eabl01gPD09VVhYeM1YoqOjFRYWpvfee0+rV6/WQw89JA8PD0lSs2bN5OXlpWPHjqljx47OXDIqiZkzZ6pVq1Zq3Lixva9169bau3dvse/8JY0bN1ZBQYG+/fZbtWnTRlJRJeS3dzXt2LFDNptNL7/8stzcipY7Llu2zGEcvvMwMxIYmFbDhg3Vo0cPPfnkk3r99dfl7++v8ePHq3bt2urRo4ckadSoUerWrZsaNWqks2fPav369WratOllx6tXr56ysrK0bt06tWzZUlWrVr3iv1L79u2rpKQk7d+/X+vXr7f3+/v7a8yYMRo9erRsNpvatWunjIwMffXVV7Jarerfv7/rfxAwtebNmys+Pl6JiYn2vnHjxumOO+7Q8OHDNWjQIPn6+mrv3r1au3at/v73v6tJkyaKiYnR4MGDNX/+fHl4eOi5556Tj4+P/bEAkZGRys/P16uvvqru3bvrq6++UlJSksO5+c7D1Cp6EQ5wLb9d9Ph7Z86cMfr162cEBAQYPj4+RmxsrLF//3779uHDhxsNGjQwvLy8jJo1axr9+vUzfv75Z8Mwii/iNQzDGDJkiFGjRg1DkjFp0iTDMBwXNF6yd+9eQ5IRHh5u2Gw2h202m82YO3eu0bhxY8PDw8OoWbOmERsba2zcuNHpnwXM73Lf5yNHjhienp7Gb38l//e//zW6dOli+Pn5Gb6+vkaLFi2M6dOn27enpKQY3bp1M7y8vIzw8HBj6dKlRq1atYykpCT7Pq+88ooREhJi///G4sWL+c7jD8NiGIZRgfkTAMAFTpw4obCwMH3++ee6++67KzocoMyRwACACX3xxRfKyspS8+bNlZqaqrFjx+rkyZPav3+/fX0K8EfGGhgAMKH8/Hy98MILOnz4sPz9/RUdHa0lS5aQvKDSoAIDAABMh1cJAAAA0yGBAQAApkMCAwAATIcEBgAAmA4JDIDLGjBggHr27Gn/fNddd2nUqFHlHseGDRtksVh07ty5K+5jsVi0YsWKEo85efJktWrVyqm4fvzxR1ksFu3cudOpcQBcHxIYwEQGDBggi8Uii8UiT09PRUZGasqUKSooKCjzc//73//W1KlTS7RvSZIOAHAGz4EBTKZr165auHChcnNz9emnn2rYsGHy8PDQhAkTiu2bl5cnT09Pl5y3evXqLhkHAFyBCgxgMl5eXgoODlZ4eLiGDh2qmJgYffzxx5J+nfaZPn26QkND7W84Pn78uHr37q3AwEBVr15dPXr00I8//mgfs7CwUM8++6wCAwNVo0YNjR07Vr9/RNTvp5Byc3M1btw4hYWFycvLS5GRkVqwYIF+/PFHderUSZJUrVo1WSwWDRgwQJJks9mUkJCgiIgI+fj4qGXLlvrggw8czvPpp5+qUaNG8vHxUadOnRziLKlx48apUaNGqlq1qurXr6+JEycqPz+/2H6vv/66wsLCVLVqVfXu3VsZGRkO29966y01bdpU3t7eatKkiV577bVSxwKgbJDAACbn4+OjvLw8++d169YpOTlZa9eu1apVq5Sfn6/Y2Fj5+/vryy+/1FdffSU/Pz917drVftzLL7+sRYsW6e2339bmzZt15swZLV++/Krnfeyxx/Svf/1LiYmJ2rdvn15//XX5+fkpLCxMH374oSQpOTlZqamp+tvf/iZJSkhI0OLFi5WUlKQ9e/Zo9OjRevTRR7Vx40ZJRYlWr1691L17d+3cuVODBg3S+PHjS/0z8ff316JFi7R371797W9/05tvvqk5c+Y47HPw4EEtW7ZMK1eu1GeffaZvv/1WTz/9tH37kiVL9OKLL2r69Onat2+fZsyYoYkTJ+qdd94pdTwAykAFvkgSQCn99k3GNpvNWLt2reHl5WWMGTPGvj0oKMjIzc21H/OPf/zDaNy4scMbhHNzcw0fHx9jzZo1hmEYRkhIiDF79mz79vz8fKNOnToOb03u2LGj8cwzzxiGYRjJycmGJGPt2rWXjfNyb/rOyckxqlatanz99dcO+w4cONB45JFHDMMwjAkTJhjNmjVz2D5u3LhiY/2eJGP58uVX3P7Xv/7VaNOmjf3zpEmTjCpVqhgnTpyw961evdpwc3MzUlNTDcMwjAYNGhhLly51GGfq1KlGVFSUYRhFb5CWZHz77bdXPC+AssMaGMBkVq1aJT8/P+Xn58tms6lv376aPHmyfXvz5s0d1r3s2rVLBw8elL+/v8M4OTk5OnTokDIyMpSamqq2bdvat7m7u+u2224rNo10yc6dO1WlShV17NixxHEfPHhQFy5cUJcuXRz68/LydOutt0qS9u3b5xCHJEVFRZX4HJe89957SkxM1KFDh5SVlaWCggJZrVaHferWravatWs7nMdmsyk5OVn+/v46dOiQBg4cqCeffNK+T0FBgQICAkodDwDXI4EBTKZTp06aP3++PD09FRoaKnd3x/8b+/r6OnzOyspSmzZttGTJkmJj1axZ87pi8PHxKfUxWVlZkqRPPvnEIXGQitb1uMqWLVsUHx+vl156SbGxsQoICNC7776rl19+udSxvvnmm8USqipVqrgsVgDXjwQGMBlfX19FRkaWeP/WrVvrvffeU61atYpVIS4JCQnRtm3b1KFDB0lFlYYdO3aodevWl92/efPmstls2rhxo2JiYoptv1QBKiwstPc1a9ZMXl5eOnbs2BUrN02bNrUvSL5k69at177I3/j6668VHh6uP//5z/a+o0ePFtvv2LFjSklJUWhoqP08bm5uaty4sYKCghQaGqrDhw8rPj6+VOcHUD5YxAv8wcXHx+umm25Sjx499OWXX+rIkSPasGGDRo4cqRMnTkiSnnnmGc2cOVMrVqzQDz/8oKeffvqqz3CpV6+e+vfvryeeeEIrVqywj7ls2TJJUnh4uCwWi1atWqWffvpJWVlZ8vf315gxYzR69Gi98847OnTokP73v//p1VdftS+MHTJkiA4cOKDnn39eycnJWrp0qRYtWlSq623YsKGOHTumd999V4cOHVJiYuJlFyR7e3urf//+2rVrl7788kuNHDlSvXv3VnBwsCTppZdeUkJCghITE7V//37t3r1bCxcu1CuvvFKqeACUDRIY4A+uatWq2rRpk+rWratevXqpadOmGjhwoHJycuwVmeeee079+vVT//79FRUVJX9/fz344INXHXf+/Pn605/+pKefflpNmjTRk08+qezsbElS7dq19dJLL2n8+PEKCgrS8OHDJUlTp07VxIkTlZCQoKZNm6pr16765JNPFBERIaloXcqHH36oFStWqGXLlkpKStKMGTNKdb0PPPCARo8ereHDh6tVq1b6+uuvNXHixGL7RUZGqlevXrr33nt1zz33qEWLFg63SQ8aNEhvvfWWFi5cqObNm6tjx45atGiRPVYAFctiXGmVHgAAwA2KCgwAADAdEhgAAGA6JDAAAMB0SGAAAIDpkMAAAADTIYEBAACmQwIDAABMhwQGAACYDgkMAAAwHRIYAABgOiQwAADAdEhgAACA6fx/vCFcYV6CeaoAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n",
        "\n",
        "cm = confusion_matrix(y_true, y_pred)\n",
        "ConfusionMatrixDisplay(\n",
        "    confusion_matrix=cm,\n",
        "    display_labels=agile_classifier.labels,\n",
        ").plot()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fJF2tk0hbtU5"
      },
      "source": [
        "Finally, you can also look at the ROC curve to get a sense of potential\n",
        "prediction errors with using different scoring thresholds."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "B7l8e49GceWY"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<sklearn.metrics._plot.roc_curve.RocCurveDisplay at 0x7eb4d130ef20>"
            ]
          },
          "execution_count": 25,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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UvHOzQAAWFW1ws3evXv15ptvau/evZo1a5aio6P18ccf64orrtC1117r6RpRBcYY3TN3k7Z+/5O/SwEAwK/cnpb6/PPP1b59e/3zn//UihUrdPLkSUnSV199VeEuwfC+M6WOCoNN4pWNFBoUWO5rAABYjdtnbsaMGaMpU6YoPT1d4eHhrvZbbrlFs2fP9mhxqJ4t45IVZv8lzIQGBcpms/mxIgAAfMftcPPNN99oyZIlF7VHR0eroKDAI0Xh8oTZA7nsGwBQZ7k9LdWwYUMdPXr0ovbt27eradOmHikKAACgutwON/fdd5+eeuop5eXlyWazyel0auPGjRo9erQGDRrkjRoBAACqzO1wM23aNF1zzTWKj4/XyZMn1bZtW918883q1q2bxo0b540aAQAAqszthRl2u13z58/X+PHj9e233+rkyZO6/vrrdfXVV3ujPgAAALe4HW42bNigG2+8UVdccYWuuOIKb9SES7hwsz6JDfsAADjP7XBzyy23qGnTprr//vv1hz/8QW3btvVGXagAm/UBAFA5t9fcHDlyRP/zP/+jzz//XO3atVPHjh314osv6ocffvBGfbhAZZv1SWzYBwCAzRhjqnvw/v37tWTJEr3zzjvatWuXbr75Zn366aeerM/j3Lllek10uuSc2k5YI+nizfokNuwDAFiTOz+/L2unt+bNm2vMmDHq0KGDxo8fr88///xy3g5uYrM+AAAu5va01HkbN27UY489pri4OPXv31/t2rXTqlWrPFkbAACA29z+tX/s2LFaunSpjhw5oltvvVWzZs1S3759FRYW5o36AAAA3OJ2uPn73/+uJ554Qvfee6+ioqK8URMAAEC1uR1uNm7c6I06AAAAPKJK4WblypW6/fbbFRQUpJUrV1ba96677vJIYQAAANVRpXDTr18/5eXlKTo6Wv369auwn81mk8PBTrkAAMB/qhRunE5nuX8GAACoady+FHzRokUqLi6+qL2kpESLFi3ySFEAAADV5Xa4GTx4sAoLCy9qP3HihAYPHuyRogAAAKrL7XBjjCl3e/8ffvhBkZGRHikKAACguqp8Kfj1118vm80mm82mXr16qV69Xw51OBzav3+/evfu7ZUiAQAAqqrK4eb8VVI5OTlKSUlRgwYNXK/Z7XYlJCTod7/7nccLBAAAcEeVw01GRoYkKSEhQampqQoJCfFa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PfPMM5o7d66/S7OUdevWadq0aXr11Ve1bds2rVixQqtWrdKzzz7r79LgAZy5qaKoqCgFBgYqPz+/THt+fr5iY2PLPSY2Ntat/qjeOJ/30ksv6bnnntPatWt13XXXebPMWs/dcd67d68OHDigPn36uNqcTqckqV69esrNzVXLli29W3QtVJ2/z3FxcQoKClJgYKCrrU2bNsrLy1NJSYnsdrtXa66NqjPO48eP18CBA/XQQw9Jktq3b69Tp07p4Ycf1jPPPKOAAH7394SKfg5GRER47ayNxJmbKrPb7ercubOys7NdbU6nU9nZ2UpKSir3mKSkpDL9JemTTz6psD+qN86S9MILL+jZZ59VVlaWEhMTfVFqrebuOF9zzTX65ptvlJOT43rcdddd6tmzp3JychQfH+/L8muN6vx97t69u/bs2eMKj5K0e/duxcXFEWwqUJ1xPn369EUB5nygNNxy0WP89nPQq8uVLWbp0qUmODjYLFy40OzYscM8/PDDpmHDhiYvL88YY8zAgQPNmDFjXP03btxo6tWrZ1566SWzc+dOk5GRwaXgVeDuOD/33HPGbreb9957zxw9etT1OHHihL++Qq3g7jhfiKulqsbdcT548KAJDw83w4cPN7m5ueajjz4y0dHRZsqUKf76CrWCu+OckZFhwsPDzTvvvGP27dtn/u///s+0bNnS3Hvvvf76CrXCiRMnzPbt28327duNJDNjxgyzfft28/333xtjjBkzZowZOHCgq//5S8GfeOIJs3PnTjNnzhwuBa+JXnnlFXPFFVcYu91uunTpYv7xj3+4XuvRo4dJS0sr0//dd981rVq1Mna73Vx77bVm1apVPq64dnJnnK+88koj6aJHRkaG7wuvZdz9+/yfCDdV5+44f/HFF6Zr164mODjYtGjRwkydOtWcO3fOx1XXPu6Mc2lpqZk4caJp2bKlCQkJMfHx8eaxxx4zP/30k+8Lr0U+++yzcv+9PT+2aWlppkePHhcd07FjR2O3202LFi3Mm2++6fU6bcZw/g0AAFgHa24AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AAIClEG4AlLFw4UI1bNjQ32VUm81m0wcffFBpnwceeED9+vXzST0AfI9wA1jQAw88IJvNdtFjz549/i5NCxcudNUTEBCgZs2aafDgwTp27JhH3v/o0aO6/fbbJUkHDhyQzWZTTk5OmT6zZs3SwoULPfJ5FZk4caLrewYGBio+Pl4PP/ywjh8/7tb7EMQA99XzdwEAvKN379568803y7T9+te/9lM1ZUVERCg3N1dOp1NfffWVBg8erCNHjmjNmjWX/d6xsbGX7BMZGXnZn1MV1157rdauXSuHw6GdO3fqwQcfVGFhoZYtW+aTzwfqKs7cABYVHBys2NjYMo/AwEDNmDFD7du3V/369RUfH6/HHntMJ0+erPB9vvrqK/Xs2VPh4eGKiIhQ586dtWXLFtfrGzZs0E033aTQ0FDFx8fr8ccf16lTpyqtzWazKTY2Vk2aNNHtt9+uxx9/XGvXrtWZM2fkdDo1efJkNWvWTMHBwerYsaOysrJcx5aUlGj48OGKi4tTSEiIrrzySmVmZpZ57/PTUs2bN5ckXX/99bLZbPrv//5vSWXPhsybN09NmjSR0+ksU2Pfvn314IMPup5/+OGH6tSpk0JCQtSiRQtNmjRJ586dq/R71qtXT7GxsWratKmSk5P1+9//Xp988onrdYfDoSFDhqh58+YKDQ1V69atNWvWLNfrEydO1FtvvaUPP/zQdRZo3bp1kqRDhw7p3nvvVcOGDdW4cWP17dtXBw4cqLQeoK4g3AB1TEBAgP785z/ru+++01tvvaVPP/1UTz75ZIX9BwwYoGbNmunLL7/U1q1bNWbMGAUFBUmS9u7dq969e+t3v/udvv76ay1btkwbNmzQ8OHD3aopNDRUTqdT586d06xZszR9+nS99NJL+vrrr5WSkqK77rpL//rXvyRJf/7zn7Vy5Uq9++67ys3N1dtvv62EhIRy33fz5s2SpLVr1+ro0aNasWLFRX1+//vf6//9v/+nzz77zNV2/PhxZWVlacCAAZKk9evXa9CgQRo5cqR27Nihv/zlL1q4cKGmTp1a5e944MABrVmzRna73dXmdDrVrFkzLV++XDt27NCECRP09NNP691335UkjR49Wvfee6969+6to0eP6ujRo+rWrZtKS0uVkpKi8PBwrV+/Xhs3blSDBg3Uu3dvlZSUVLkmwLK8ft9xAD6XlpZmAgMDTf369V2Pe+65p9y+y5cvN7/61a9cz998800TGRnpeh4eHm4WLlxY7rFDhgwxDz/8cJm29evXm4CAAHPmzJlyj7nw/Xfv3m1atWplEhMTjTHGNGnSxEydOrXMMTfccIN57LHHjDHGjBgxwtxyyy3G6XSW+/6SzPvvv2+MMWb//v1Gktm+fXuZPmlpaaZv376u53379jUPPvig6/lf/vIX06RJE+NwOIwxxvTq1ctMmzatzHssXrzYxMXFlVuDMcZkZGSYgIAAU79+fRMSEmIkGUlmxowZFR5jjDHDhg0zv/vd7yqs9fxnt27duswYFBcXm9DQULNmzZpK3x+oC1hzA1hUz5499dprr7me169fX9K/z2JkZmZq165dKioq0rlz53T27FmdPn1aYWFhF71Penq6HnroIS1evNg1tdKyZUtJ/56y+vrrr/X222+7+htj5HQ6tX//frVp06bc2goLC9WgQQM5nU6dPXtWN954o15//XUVFRXpyJEj6t69e5n+3bt311dffSXp31NKt956q1q3bq3evXvrN7/5jW677bbLGqsBAwZo6NChevXVVxUcHKy3335b9913nwICAlzfc+PGjWXO1DgcjkrHTZJat26tlStX6uzZs/rf//1f5eTkaMSIEWX6zJkzRwsWLNDBgwd15swZlZSUqGPHjpXW+9VXX2nPnj0KDw8v03727Fnt3bu3GiMAWAvhBrCo+vXr66qrrirTduDAAf3mN7/Ro48+qqlTp6px48basGGDhgwZopKSknJ/SE+cOFH9+/fXqlWr9PHHHysjI0NLly7Vb3/7W508eVJ//OMf9fjjj1903BVXXFFhbeHh4dq2bZsCAgIUFxen0NBQSVJRUdElv1enTp20f/9+ffzxx1q7dq3uvfdeJScn67333rvksRXp06ePjDFatWqVbrjhBq1fv14vv/yy6/WTJ09q0qRJuvvuuy86NiQkpML3tdvtrv8Gzz33nO68805NmjRJzz77rCRp6dKlGj16tKZPn66kpCSFh4frxRdf1D//+c9K6z158qQ6d+5cJlSeV1MWjQP+RLgB6pCtW7fK6XRq+vTprrMS59d3VKZVq1Zq1aqVRo0apfvvv19vvvmmfvvb36pTp07asWPHRSHqUgICAso9JiIiQk2aNNHGjRvVo0cPV/vGjRvVpUuXMv1SU1OVmpqqe+65R71799bx48fVuHHjMu93fn2Lw+GotJ6QkBDdfffdevvtt7Vnzx61bt1anTp1cr3eqVMn5ebmuv09LzRu3DjdcsstevTRR13fs1u3bnrsscdcfS4882K32y+qv1OnTlq2bJmio6MVERFxWTUBVsSCYqAOueqqq1RaWqpXXnlF+/bt0+LFizV37twK+585c0bDhw/XunXr9P3332vjxo368ssvXdNNTz31lL744gsNHz5cOTk5+te//qUPP/zQ7QXF/+mJJ57Q888/r2XLlik3N1djxoxRTk6ORo4cKUmaMWOG3nnnHe3atUu7d+/W8uXLFRsbW+7Gg9HR0QoNDVVWVpby8/NVWFhY4ecOGDBAq1at0oIFC1wLic+bMGGCFi1apEmTJum7777Tzp07tXTpUo0bN86t75aUlKTrrrtO06ZNkyRdffXV2rJli9asWaPdu3dr/Pjx+vLLL8sck5CQoK+//lq5ubkqKChQaWmpBgwYoKioKPXt21fr16/X/v37tW7dOj3++OP64Ycf3KoJsCR/L/oB4HnlLUI9b8aMGSYuLs6EhoaalJQUs2jRIiPJ/PTTT8aYsgt+i4uLzX333Wfi4+ON3W43TZo0McOHDy+zWHjz5s3m1ltvNQ0aNDD169c311133UULgv/ThQuKL+RwOMzEiRNN06ZNTVBQkOnQoYP5+OOPXa/PmzfPdOzY0dSvX99ERESYXr16mW3btrle138sKDbGmPnz55v4+HgTEBBgevToUeH4OBwOExcXZySZvXv3XlRXVlaW6datmwkNDTURERGmS5cuZt68eRV+j4yMDNOhQ4eL2t955x0THBxsDh48aM6ePWseeOABExkZaRo2bGgeffRRM2bMmDLHHTt2zDW+ksxnn31mjDHm6NGjZtCgQSYqKsoEBwebFi1amKFDh5rCwsIKawLqCpsxxvg3XgEAAHgO01IAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBS/j9jQdYspRD7LQAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "from sklearn.metrics import RocCurveDisplay, roc_curve\n",
        "\n",
        "fpr, tpr, _ = roc_curve(y_true, y_prob, pos_label=1)\n",
        "RocCurveDisplay(fpr=fpr, tpr=tpr).plot()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fPAP2K3jgfGh"
      },
      "source": [
        "## Appendix\n",
        "\n",
        "We have done some basic exploration of the hyper-parameter space to help get a better sense of the relationship between the dataset size and the performance. See the following plot."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "fMSDQtyTgeP0"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABokAAAI1CAYAAAAKBhOtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAABYl\nAAAWJQFJUiTwAADqtElEQVR4nOz9eXycdb3//z9nn0wmyyRNszVrN7pF2pTSAuIRq+LCEUE58lEK\nnI/w/Qoi389HFFwOFI5HRfEoHz8HDocfR72xe+SA1KMgHoVaBUpboOlCl6RN2mxNOpNlMktmuX5/\nTDJNmkyaNtMszeN+u/WW9Jr3dV3v6dVJ5j3P6/16mwzDMAQAAAAAAAAAAIBZxTzVHQAAAAAAAAAA\nAMDkIyQCAAAAAAAAAACYhQiJAAAAAAAAAAAAZiFCIgAAAAAAAAAAgFmIkAgAAAAAAAAAAGAWIiQC\nAAAAAAAAAACYhQiJAAAAAAAAAAAAZiFCIgAAAAAAAAAAgFmIkAgAAAAAAAAAAGAWIiQCAAAAAAAA\nAACYhQiJAAAAAAAAAAAAZiFCIgAAAAAAAAAAgFmIkAgAAAAAAAAAAGAWIiQCAMxal112mRYvXqw3\n33xzqrsCAAAAAEmMVQAAk8U61R0AAExvd911l55//nlJktVq1ebNm5Wfn5+y/R/+8Afdeuutyb9/\n73vf01VXXZWWvhw9elTPP/+8srKydMMNN6TlmNPFm2++qQ0bNpyy3Xnnnadf//rXyb/H43Ft3bpV\ndXV12rVrl+rq6tTc3CxJ2rhxo6699tqz1mcAAABgKjFWmRypxio2m00ej0fLli3Tpz71KX3sYx8b\n1/G6urr07LPP6rXXXlNjY6O6u7uVnZ2tiooKfeADH9Df/d3fyePxjOtYwWBQzz//vDZv3qz33ntP\nPp9PJpNJeXl5Wr58uT70oQ/pox/9qJxO52k955P9/Oc/1/e+9z1J0jXXXKN//Md/HLP94P/NNWvW\n6PHHH09L2+7ubv3qV7/Sli1bVF9fL5/PJ6vVqrlz52r58uX62Mc+pr/5m7+R1crHvQBODz81AADj\nFo1GtWnTpjEHPS+88MJZO39zc7P+7//9vyotLU3LwKusrEx2u10ZGRkT71waeTweWSyWlI8N5ff7\ndf31109GtwAAAIBpi7HK5Bg6Vunr69OxY8d07Ngx/elPf9Lvfvc7/fjHP045lpGkTZs26b777lNP\nT48kyWw2KysrSz6fT8ePH9eOHTv02GOP6e6779YVV1wxZl/++Mc/6u6771ZHR0dym8vlkslkUnNz\ns5qbm/Xyyy/rgQce0A9+8AOtW7fujJ/30P87v/vd7/Ttb39bDofjjI93uv7jP/5D999/v3p7e5Pb\n3G63YrGYDh8+rMOHD+s3v/mNKisr9eCDD+q8886btL4BmPkIiQAA41JSUqKWlhb9+te/Tjno6erq\n0quvviqXyyW73a6urq5J7ePp+sUvfjHVXRjVr371K82bN2/c7V0ul5YuXarly5drxYoV+v73vz9s\noAQAAACcyxirTJ6TxypHjhzRAw88oJdeekkvv/yynnnmGX3+858fdd9nnnlGGzdulGEYWrZsmW6/\n/XatW7dOdrtdkUhEb7zxhh588EHV1dXpa1/7mvr6+vS5z31u1GP953/+p771rW8pHo+rqqpKX/rS\nl3TppZcmb6rr7e3VX//6Vz3xxBPaunWrtm3bdsYh0Xvvvae9e/eqtLRUlZWV+stf/qI//OEP+sQn\nPnFGxztd//Iv/6L/83/+jySppqZGN998s9atWye32y1J8nq92rx5s37xi19oz5492rNnDyERgNPC\nmkQAgHE5//zzVV5erj179ujAgQOjtvmv//ovRSIRffSjH53Uu6pms6ysLG3fvl1PPvmkvvGNb+iT\nn/yk7Hb7VHcLAAAAmDSMVaZOWVmZHnjgAS1YsECShpXGHmrPnj36zne+I8Mw9KEPfUjPPvusPvCB\nDyTHLjabTe9///v1zDPPaP369TIMQ9/5zne0d+/eEcd67733dM899ygej+sDH/iAXnjhBX3qU58a\nVnUhKytLH/3oR/X444/rxz/+sTIzM8/4OQ7OIvrkJz+pv/3bv5WkZJnDs23z5s366U9/Kkn67Gc/\nq2effVYf/vCHkwGRJOXl5enKK69MBmc2m21S+gbg3EFIBAAYt0996lOSUpdpGBwQDLY7lT/+8Y/6\n0pe+pIsvvljLly/XunXr9P/+v/+v/vznP49oe9lllyXrYDc3N2vx4sXD/vznf/7nsLaDi7y2t7dr\n48aN+tCHPqTly5cP69upFoONRCJ69tlndf3112vt2rVavny5PvjBD+rv//7v9eyzzyoQCIzreZ5N\nJpNJZjO/zgEAADC7MVaZurGKzWbThRdeKEk6ePDgqG1+8pOfKBKJaO7cufrBD36QMsiwWq36/ve/\n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\neNp9nTdvXnJtppP/DIZB8XhcL7744riP+eqrr44owzc4e2pwdtpYBtucvPbQYH9isZheffXVcfcH\nAE4XIREA4IwM1vSORCLKycnRZZddNq79zj//fEnSn/70p2F3ao3H4N12Z/MOOpvNpmXLlkmSXnvt\ntbN2HgAAAABnB2OVyXfLLbdISsyqOXTo0LDHioqKdOmll0pScnbXWPx+v5544glJibWXioqKhh1r\nsKTdeI416HSuyxtvvKHW1lY5HA79+c9/1ltvvZXyz3nnnadIJKL/+q//GnaMJUuWSEqUt2tra0t5\nrlAopL1790qSli5dOuyxVatWadGiRZKkRx99NFlqMJ3PFQAkQiIAwBlavny5brvtNv393/+9vvnN\nbyan05/Kpz/9aZnNZh07dkyPPPLImG27u7uH/d3tdkuSent7z6zT4zR4p+Hzzz+v995776yeCwAA\nAEB6MVaZfBdffLGWLFmieDw+6r/dV77yFdlsNh07dkxf//rXU4Zw0WhUd955pzo6OmSz2fSVr3xl\nRJv/7//7/2S329XW1qavfvWrCofDY/btt7/9rX72s5+N+7k8//zzkqRLLrlEc+fOVXZ2dso/H/nI\nR4btM+iSSy5RZmamJOnf//3fU57rmWeeUSAQkNlsHnVdozvuuEMmk0l79uzRvffemyyJOBrDMPT4\n44/rN7/5zbifKwBIhEQAgAn48pe/rDvvvDN5p954zJ8/X9dff72kxMKg9957r44cOZJ8vK+vT3/5\ny1/0ta99TbfffvuwfSsqKmSz2dTb26uXX345Lc9hNJ/97Ge1ZMkS9ff364YbbtALL7yQrBMdCoW0\nc+dOffvb39a77747bL+f/vSnWrx4sRYvXnzW+jaa3t5eeb3e5J/BgUMwGBy2vb+/f1L7BQAAAEwV\nxiqTP1b5+7//e0nSpk2bhv27SYng7hvf+IYk6b//+7/1uc99Tps3b06GRdFoVFu2bNG1116bLDX3\njW98IzlzaqglS5bo7rvvlslk0quvvqorr7xSv/71r9XV1ZVs09vbq9///ve67rrr9L/+1/9SX1/f\nuJ5DX1+fXnnlFUlKBkBjGWyza9euYWUK3W63brrpJknSL37xC33ve99Ta2tr8vHjx4/rX//1X/XD\nH/5QkvSZz3xG5eXlI47/gQ98IDlL65e//KU+97nP6Q9/+MOw5+P1evXCCy/oqquu0ne+853TngUH\nANap7gAAYPb52te+plAopKefflpPPfWUnnrqKWVmZspisai3tzc5PX7NmjXD9nO5XPrEJz6hF154\nQV/5yleUlZWl7OxsSdLXv/51XX755Wnpn91u18MPP6ybb75Z+/fv15133qlvfvObcrvd6unpSfbv\niiuuSMv5JuqWW27R1q1bR2y///77df/99yf//r3vfU9XXXXVZHYNAAAAmFEYq5y5j3/84/rJT36i\n5uZmPfroo7rvvvuGPf75z39emZmZ+s53vqNdu3bppptuktlsVnZ2tnp7exWLxSQlApZ/+Id/GDPg\n++xnPyuPx6O7775bDQ0N+vrXvy4pcR1MJtOwEKW0tFRr164d13N46aWXFAwGZbPZ9MEPfvCU7Rcu\nXKiqqiodOnRIzz//vL72ta8lH/t//p//R21tbXrmmWf085//XD//+c+VmZkps9k8bMbZhz70IX3r\nW99KeY6vfOUrmjt3rn74wx/q3Xff1a233ipJysrKUjQaTYaEkrRo0SKtWLFiXM8VAAYREgEAJp3F\nYtHGjRt1xRVX6JlnntH27dvV0dGhSCSikpISLV26VOvXr9eHPvShEfvee++9Kiws1O9//3u1tLQk\nF2wNBAJp7WNxcbGee+45Pfvss/rd736nAwcOKBgMqqSkRFVVVbr88stVU1OT1nMCAAAAmFqMVc6c\n1WrV9ddfr+9+97v6z//8T91yyy3D1hOSEutFfeADH9Czzz6r1157TYcPH1Zvb69ycnJUUVGhSy+9\nVJ/73OeUl5d3yvOtX79eF110kZ5//nm99tpr2rdvn3w+n0wmk0pLS7V8+XJ95CMf0Uc+8pFxlxx8\n4YUXJEkXXnihcnJyxrXPRz/6Uf3rv/6rXnzxRf3v//2/ZbFYJCXWqbr33nv1yU9+Us8++6zefvtt\ndXZ2KhKJqKioSO973/v0qU99SpdddplMJtOY5/jc5z6nyy+/XP/xH/+hLVu2qL6+Xl1dXbLZbKqs\nrFRNTY0+/vGP69JLL02eHwDGy2SwmhkAAAAAAAAAAMCsw5pEAAAAAAAAAAAAsxAhEQAAAAAAAAAA\nwCxESAQAAAAAAAAAADALWdN5sE2bNunpp5/Wvn37FI/HVVVVpauvvlrXXnutzObTy6NaWlr0b//2\nb/rzn/+s9vZ2ud1urVixQjfccIMuvvjis9KPdPYfAAAAAE4H4ykAAAAAk81kGIaRjgPde++9euqp\n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\nS0+7DA0PjuJGXI1dR9XYdVR/PPRXSQNrJuWUqNpTofl55ar2VKg8p0RWCx/3AdNBIBLUzra92ta8\nUztad8nf3zdqO5NMWphfpdqSFVpdWqN52cUymUzavn37JPcYs1Vaf2ts2rRJTz/9tPbt26d4PK6q\nqipdffXVuvbaa0974ay2tjY9+uij2rJli1pbE3dVFBcXa+3atbrppptUVlY2Yp+77rpLzz//fMpj\nVlVV6aWXXpqU/gMAAADA6WA8BQCzj9Pq0OI587V4zvzktmAkpMNdR5LrGzX4mkaddRCLx3TId0SH\nfEf03w2JbVazVRU5pckyddWecs3LKZHVbJmspwTMah19x7W9pU7bW3Zq17H9isVjo7ZzWOyqKVqi\n2pIarSpZrlxn9iT3FDghbSHRvffeq6eeekoOh0Pr1q2T1WrV66+/rvvuu0+vv/66HnzwQVks4/uF\ntGfPHl1//fXq6elRUVGRLrnkEknSrl279Oyzz2rTpk167LHHtGrVqlH3X7VqlSoqKkZsLygomJT+\nAwAAAMDpYDwFABiUYXNqScFCLSlYmNwW6A/qUNeR5GyjBm+j2vwdI/aNxqOq9zWq3teoV+r/LEmy\nma2qzJ2n6ryKZHBUml0kC8ERMGFxI64Gb5O2tSTKyDV2HU3Z1pORo9qSxPpCy+cuZp0xTBtpCYle\nfvllPfXUUyooKNATTzyhyspKSVJnZ6c2bNigV155RU888YSuv/76cR3vvvvuU09Pj6655hrdfffd\nstkS9VUjkYjuuecePffcc9q4caNefPHFUff/7Gc/q6uuumrK+g8AAAAA48V4CgBwKi57hpbNXaRl\ncxclt/X1B3TI16T6geDokLdJ7X2dI/aNxKM64D2sA97DyW12i01VuWWqyivXfE8iPCrJKmTmJzAO\n/dF+1R3bN7C+0E51hXpStq3MnafVpTVaXVKjKk+5TCbTJPYUGJ+0hESPPPKIJOmOO+5IDggkac6c\nOdq4caOuu+46Pfroo7ruuutO+csmHA7r7bffliR95StfSQ5oJMlms+n222/Xc889p3379ikYDCoj\nI2Na9R8AAAAATgfjKQDAmci0u7S88DwtLzwvua037Nch35HEGke+RLm6joB3xL79sYj2HW/QvuMN\nyW0Oq0NVgzOOBtY5KsqaK7OJn91AV7B7oIxcnXa271V/LDJqO6vZquVzF6m2pEa1JSs0JzNvknuK\n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\nTCYVZc1VUdZcXVS+WpIUN+Jq83eowZuYadTga9IhX5NC0ZGl6rzBLnmbu7St+d3ktjmuPFXnlQ+U\nqkvMOMpyuCftOWH6iRtxNXibtL2lTttadqqx62jKth5nTmK2UGmNls9dLLvVPok9xXQUC/QocHCH\nAgfeUqDhHRn9I0NsSZLZImf50oFgaLVsnqJhDztLFqjs1oe166VnZQn6VLF0lVyL18yYgEhKQ0hU\nXFysZcuWaffu3XrppZd05ZVXDnt869atamtrU0FBgVauXHnK482dO1eStHv3bkUikRELqkYiEe3e\nvVuSNG/evHH383e/+52kxEKtZ7P/AAAAADBejKcAALOF2WRWSVahSrIKdUlFogRTPB5Xi789UabO\n26h6X5MO+44oHBtZuqkz4FVnwKutR99Jbpubma9qT0VitlFehao8ZXLbKW96LuuP9qvu2D5tb07M\nGPKFulO2rcydp9qB9YWqPGUym8yT2FNMR/3HmwfKyG1T6Og+yYiP2s7scCljwSplLrxAGfNXyuIc\n++eK2eZQpGSZItKkrUGUTmlZeevmm2/W7bffrgceeEArV65URUWFJOn48eO69957JUk33XSTzOYT\nL8Qf/ehHeuWVV/ThD39YX/3qV5PbL730UmVkZKilpUXf+973dNddd8luTyS7/f39+qd/+ie1trYq\nJydH73//+5P77d27V21tbbr00ktlsViS26PRqB5//HE9/vjjkkYuxnqm/QcAAACAdGA8BQCYrcxm\ns+ZlF2tedrEurbxQUiI4au5tS5Sp8zap3teow11HFYlFRux/rO+4jvUd1xtHdyS3FboLBsrUVSSD\nI5ctY9KeE9KvK9SjHS112tZSp51te9Q/yv8FSbKYLVo+d7FWl9SotmSF5mTmTXJPMd0Y8ZhCR95T\n4MA2BQ68pYi3NWVba26hXIsuUObC1XKWLZHJkpboZEZIyzO9/PLLde211+rpp5/WFVdcoYsuukhW\nq1Wvv/66/H6/1q9fry984QvD9uno6NChQ4fU0dExbHt+fr7uuecefetb39KTTz6pV155RcuWLZMk\n7dq1Sx0dHbLb7frud787rIRCc3Ozbr31VuXm5qqyslKFhYXq6+vT/v37dezYMZnNZt1xxx3DBkIT\n6T8AAAAApAPjKQAATjCbzSrLKVFZTon+pmqdJCkWj+loT2uiTN3AGkeHu46OuuZMu79D7f4O/fXI\n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\niyW5PRqN6vHHH9fjjz8uaeRirAAAAACQDoyngHOP2eaQ2VMkm6dozHbx/uBJM5GGzkjqSn5vRMaa\nZ3SC0R9SxNuiiDd1CUtJMjlco6yTdNIsJbeHD3eBWSwe7VfocF1ixtDBbYr1elO2tc+tSK4v5CiZ\nL5PJnLItgOknLSHR5ZdfrmuvvVZPP/20rrjiCl100UWyWq16/fXX5ff7tX79en3hC18Ytk9HR4cO\nHTqkjo6OYdvz8/N1zz336Fvf+paefPJJvfLKK1q2bJkkadeuXero6JDdbtd3v/vdYSUU/vu//1sP\nP/ywJKm8vFxPPPHEqH2trq7WzTffnPx7c3Ozbr31VuXm5qqyslKFhYXq6+vT/v37dezYMZnNZt1x\nxx0jBlAAAAAAkA6Mp4DZy2zPkDkvQ7a8kpRtDMOQ0R8cOSPJ71PspG1GtH9c5zXCAUXCAUWON4/d\nP6f7pJlIHllOnp2U6ZHJyoLzwLkg1tetwMHt6tv/loKH3k0dUJutyqhYlgiGFq2WLWfs2ZUApre0\nhESStHHjRtXW1urJJ5/U1q1bFY/HVV1drauvvlrXXnvtsLveTuXTn/60Fi1apF/84hfatm2b/vKX\nv0iSCgsL9ZnPfEY33njjiLrY3d3dye937dqlXbt2jXrsNWvWDBvULF68WBs2bFBdXZ2am5u1Z88e\nmUwmFRUV6aqrrtLnP/95SiMAAAAAOKsYTwFIxWQyyeRwye5wSXNGlokcZBiG4qG+xOwjv0+xEbOT\nTnxVfPT1Q04WD/kVD/kV6TgyZjuzK3vIDKQ8WbNO/ponS2aOTJZTfwwVj4Rlb9klc7BLfkdArsVr\nmNEEpMFory2T1a5I55Hk+kLh5v2SjFH3N2e45Zq/Sq5FF8hVfb7MDtfkPgEAZ43JMIzRX/k46/bt\n2ye/3y+3263FixdPSR+2b98uSaqtrZ2S82P8uFYzC9dr5uBazSxcr5mF6zVzTIdrNR3eG2Pmmer/\nN9PhtYPx43olGIaheNA/pKzdKOsmDaynpHgsjWc2yZKZnZiJ5PYkgqOhX90eRQPd6vjNvyjedyK4\ntmTmqPCab8pZsmCMY2Mq8dqa/kItB9X+y+8qNuS1ZbLaZXa6FfOnLiNnyyuRa1FifSHnvPNkMltS\ntkX68dqaWab6ek3kfXHaZhIBAAAAAABgejOZTLK4smRxZck+tyJlO8OIKx7oHQiOBmci+RT1e4fP\n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\nmppRczOM/mpqaiRJRUVFUduEFqEOtQWSDfFU4iGeGv2IqRIf8dToRTyVGIinLg6JGk8xbCbJ7Nix\nQ7/97W+1ePFi3XDDDfHuDs5h2rRpevjhh/WnP/1JO3fu1AcffKDVq1dr2rRpqqqq0l133aWGhoZ4\ndzPptbW1SZK2bdum1157TV/84he1YcMGbd26VU8//bQKCgr09ttva9WqVXHuKc4mVBrhxhtvjDi1\nG/FTUlKitWvX6hOf+ITq6+v1zjvv6J133lFDQ4PKyso0f/58rtkocOWVV0qS3nvvPdXX1w94/fe/\n/334a8ojjF6hEYypqalR26SlpUmSnE7niPQJGE2IpxIL8VTiIKZKfMRToxfxVGIgnro4JGo8RZIo\nibjdbn3rW99Senq6HnnkkXh3BzG48847dfvtt6u8vFx2u135+fm65ppr9Mc//lGXX365mpqawouh\nIX5CC815vV7dcsst+uY3v6kJEyYoMzNT1113nX75y1/KYDDotddeizoiBPF14sQJbd26VRKlEUaj\nHTt2aOnSpfr444/19NNP669//as2bdqkX/7yl2pvb9d9992nX/ziF/HuZtJbuHCh5s+fL7fbrS9+\n8YvatGmTHA6Hjh07pocffljvvvtuuB465X1Gr1CtesqNAAMRTyUe4qnEQUyV2IinRjfiqcRAPHVx\nSNR4iv9RSeTJJ5/U8ePH9eCDDyo/Pz/e3cEQpKSkhBfzfO+99+LcG4RGAEjS5z73uQGvz5o1SzNm\nzJDf79fmzZtHsmuIUWjU2+zZs1VWVhbn3qCv9vZ23XvvvXI6nXruued03XXXKScnR2PGjNHixYv1\n3HPPyWaz6ZlnntHx48fj3d2k99RTT2nu3Lk6cuSI7rzzTs2dO1dLlizRH//4x/BDOknKysqKc08R\nTegzLTQCLpLQiLe+n39AMiCeungQT40+xFSJjXhq9CKeSizEU4kvUeMp1iRKIu+8846MRqNee+21\nATWZjx49Kklau3at3n33XU2YMEHf//7349BLxKq0tFSSKI8wCowfPz78dXFxccQ2xcXF2rdvn06f\nPj1S3UKMfD5f+HfismXL4tsZDPDuu++qublZV155pUpKSga8PnHiRF166aXasmWLtmzZokmTJo18\nJxGWm5urF198UR999JE2b96slpYWjRkzRtddd51mzJihefPmSZKmTJkS554imtBnWl1dXdQ2ofIX\n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\n",
            "text/plain": [
              "<Figure size 1400x400 with 2 Axes>"
            ]
          },
          "metadata": {
            "image/png": {
              "height": 282,
              "width": 836
            }
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "\n",
        "sns.set_theme(style=\"whitegrid\")\n",
        "\n",
        "results_f1 = pd.DataFrame([\n",
        "    {'training_size': 800, 'epoch': 4, 'metric': 'f1', 'score': 0.84},\n",
        "    {'training_size': 800, 'epoch': 6, 'metric': 'f1', 'score': 0.83},\n",
        "    {'training_size': 800, 'epoch': 8, 'metric': 'f1', 'score': 0.83},\n",
        "    {'training_size': 800, 'epoch': 10, 'metric': 'f1', 'score': 0.84},\n",
        "    {'training_size': 400, 'epoch': 4, 'metric': 'f1', 'score': 0.77},\n",
        "    {'training_size': 400, 'epoch': 6, 'metric': 'f1', 'score': 0.80},\n",
        "    {'training_size': 400, 'epoch': 8, 'metric': 'f1', 'score': 0.80},\n",
        "    {'training_size': 400, 'epoch': 10,'metric': 'f1', 'score': 0.81},\n",
        "    {'training_size': 200, 'epoch': 4, 'metric': 'f1', 'score': 0.78},\n",
        "    {'training_size': 200, 'epoch': 6, 'metric': 'f1', 'score': 0.80},\n",
        "    {'training_size': 200, 'epoch': 8, 'metric': 'f1', 'score': 0.78},\n",
        "    {'training_size': 200, 'epoch': 10, 'metric': 'f1', 'score': 0.79},\n",
        "])\n",
        "\n",
        "results_roc_auc = pd.DataFrame([\n",
        "    {'training_size': 800, 'epoch': 4, 'metric': 'roc-auc', 'score': 0.88},\n",
        "    {'training_size': 800, 'epoch': 6, 'metric': 'roc-auc', 'score': 0.86},\n",
        "    {'training_size': 800, 'epoch': 8, 'metric': 'roc-auc', 'score': 0.84},\n",
        "    {'training_size': 800, 'epoch': 10, 'metric': 'roc-auc', 'score': 0.87},\n",
        "    {'training_size': 400, 'epoch': 4, 'metric': 'roc-auc', 'score': 0.83},\n",
        "    {'training_size': 400, 'epoch': 6, 'metric': 'roc-auc', 'score': 0.82},\n",
        "    {'training_size': 400, 'epoch': 8, 'metric': 'roc-auc', 'score': 0.82},\n",
        "    {'training_size': 400, 'epoch': 10,'metric': 'roc-auc', 'score': 0.85},\n",
        "    {'training_size': 200, 'epoch': 4, 'metric': 'roc-auc', 'score': 0.79},\n",
        "    {'training_size': 200, 'epoch': 6, 'metric': 'roc-auc', 'score': 0.78},\n",
        "    {'training_size': 200, 'epoch': 8, 'metric': 'roc-auc', 'score': 0.80},\n",
        "    {'training_size': 200, 'epoch': 10, 'metric': 'roc-auc', 'score': 0.81},\n",
        "])\n",
        "\n",
        "\n",
        "plot_opts = dict(style='.-', ylim=(0.7, 0.9))\n",
        "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 4))\n",
        "process_results_df = lambda df: df.set_index('epoch').groupby('training_size')['score']\n",
        "process_results_df(results_f1).plot(title='Metric: F1', ax=ax1, **plot_opts)\n",
        "process_results_df(results_roc_auc).plot(title='Metric: ROC-AUC', ax=ax2, **plot_opts)\n",
        "fig.show()"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "name": "agile_classifiers.ipynb",
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
